abstract与interface的区别
abstract的用法:
//通过abstract 关键字修饰的类叫抽象类。
abstract class Animal
{
String name;
String color; abstract public void run ();//抽象方法是没有主体,没有方法的具体实现。 public void eat (){ System.out.println("动物在吃东西");
} } //一非抽象的类继承了抽象类,必须实现抽象类中的所有方法。
class Dog extends Animal
{ //需要重写父类中的run方法 public void run(){ System.out.println(name + "跑的很快");
}
}
class a
{
public static void main(String[] args)
{ Dog dog = new Dog();
dog.name = "阿旺";
dog.run(); }
}
运行结果:

interface的用法:
/*
接口 : Java开发中比较常用。
接口作用 : 用来添加拓展功能。
为什么不用类呢?因为在java中是单继承的,有时候类是不能够满足 需求的
接口定义模式:
用interface关键字来表示接口
结构:
interface 接口名{}; //如何实现接口中的方法。需要用实现来完成。
结构:
class 类 implements 接口名1,接口名2...{ } java中是支持多实现,一个类可以实现多个接口。 接口作用 :
1.用来拓展功能
2.让程序解耦
3.定义约束 接口的使用注意事项:
1.接口是一个特殊的类,是可以定义属性和方法。
2.属性默认是用final修饰的 : public static final 实际上是一个常量。
3.方法都是抽象的 : abstract public
4.接口不能创建对象。
5.接口没有构造方法。
6.接口是给类去实现的,非抽象类实现接口时,必须将接口中的方法都实现了。 */ //定义一个橡皮擦的接口
interface Eraser
{
int a = 10; // 在接口定义的变量必须初始化。接口中的变量默认是final修饰的
static int b=0; //这样也是可以的,只要有数值
// int c; //这个没有初始化,会报错
//定义擦字行为
//定义在接口中的方法是不需要实现的
//接口中的方法都是抽象方法。
public void clear(); //默认是用abstract修饰的 } interface Pancil
{
public void write();
} class EraserAndPencil implements Pancil , Eraser
{ //一个类如果实现了一个接借口,需要将所有的抽象方法都实现
//写字的方法
public void write() { System.out.println(a+"铅笔可以写字");
}
//擦字的方法
public void clear(){ System.out.println("铅笔还可以擦字");
} } class a
{
public static void main(String[] args)
{
EraserAndPencil ep = new EraserAndPencil();
ep.write();
ep.clear();
}
}
运行效果图上:

在多态中接口的形式
/*
所谓金矿: 父类指针指向子类对象
多态的另一种表现形式:
接口的引用类型指向实现类。 // 多态的另一种表现形式。 实现关系下多态:
接口 变量 = new 接口实现类对象。 */
//定义一个接口 可以做增删改查的功能
interface Dao
{ public void add();
public void del();
public void upDate();
public void search();
} class UserDao implements Dao
{ public void add(){
System.out.println("添加");
}
public void del(){
System.out.println("删除");
}
public void upDate(){
System.out.println("修改");
}
public void search(){ System.out.println("查找");
} } class a
{
public static void main(String[] args)
{
//实现下的多态的表现
// Dao 接口 , 接口是不能过创建对象的。
Dao d = new UserDao(); // 在Java中用的比较多。 比如:List就是接口
d.add();
//多态的形式。 Java实际的例子
//List list = new ArrayList(); }
}
效果图:
结论:
两者的区别:
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据
成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,
interface表示的是"like-a"关系。
4.接口一般用于在抽象类中没有可供继承的默认实现时(即没有实例变量和默认方法实现)代替该类。
5.abstract class是另一种契约形式,是设计对实现的要求;而接口是服务器对客户端的要求。
6.abstract class是一个基类,不能被实例化;接口是个声明,每个对应接口的类都要实现方法。
7. 一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法
即可,这是抽象类的一个优点
8. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类显然将无法通过编译,因为它们所实现的方法名已经不存在了,这是
接口的一个缺点;而抽象类中如果有个非抽象方法改了,就不存在这个问题,只是为子类添加了一个新的方法。
9. 看前面两点,似乎抽象类要比接口有着更多的优点,但它却有着一个难以弥补的缺点:就是一个子类只能有一个父类。A extends B 。
这样A就拥有了B的所有方法和功能,但当A还想拥有C的功能的时候。就不能通过 A extends C 来实现,而需要走一些弯路。目前系统架构
的趋势就是由针对抽象(借口,抽象类)而不是具体编程,并且将功能尽可能的细分。这就需要通过实现多个接口的方式来实现,显然,抽
象类无法提供这样的功能。从系统重构的角度来说,一个具体类抽象出接口是十分方便的。只需要写一个接口,里面定义具体类的所有方法,
然后在为这个具体类implement这个接口就可以了。而抽象类就要复杂的多,比如说 B extends A , C extends B 如果想要为c抽象出一个抽象
类D的话,就需要找到它的最顶层A来从头做起,因为无法做到C extends D
abstract与interface的区别的更多相关文章
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- Java开发之abstract 和 interface的区别
Java开发abstract 和 interface的区别 java开发里面经常会用到虚函数和接口,这两者的区别是什么呢? abstract: 子类里面只能继承一个父类 interface: 子类可以 ...
- Java中abstract和interface的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- abstract和interface的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- 虚方法(virtual)\抽象方法(abstract)\接口(interface)的区别
转自:https://www.cnblogs.com/fantaohaoyou/p/9402657.html 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽 ...
- Java abstract class 和 interface 的区别
Java abstract class 和 interface 的区别 1. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制 2. 以Door的抽象概 ...
- Abstract Class与 Interface 的区别
表格 Abs ...
- 【转载】java abstract class和interface的区别
转载:https://blog.csdn.net/b271737818/article/details/3950245 在Java语言中,abstract class和interface是支持抽象类定 ...
- Java abstract interface与 interface的区别
我们常常遇到abstract class与 interface的区别,今天却遇到了abstract interface,感觉interface不用abstract再修饰了啊.结论:事实也确实如此,编译 ...
随机推荐
- Diffie-Hellman密钥交换算法
Diffie-Hellman密钥交换算法 之前做过的一个项目中用过DH算法(Diffie-Hellman),这种密钥交换技术的目的在于使得两个用户安全地交换一个共享密钥(shared secret)以 ...
- 使用powershell批量修改文本为utf8
根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp ...
- NC凭证接口(Java发送流和处理返回结果)
问题描述: 金融行业在系统模块分为财务和业务两个系统,我公司是负责业务模块系统,NC公司负责财务系统.但是财务有时候需要生成凭证,这时候就涉及业务模块了,我方就需要写NC凭证接口.这时候就需要三方交互 ...
- Vue.js 整理笔记
以前我们用Jquery进行dom的操作,虽然熟悉后开发效率很高,但是如果多个控件的相互操作多的情况下,还是会乱.相比之下,Vue的使用更加清晰,通过虚拟dom将数据绑定,而且组件化和路由的帮助下,让整 ...
- 最长回文子串(Longest Palindromic Substring)
这算是一道经典的题目了,最长回文子串问题是在一个字符串中求得满足回文子串条件的最长的那一个.常见的解题方法有三种: (1)暴力枚举法,以每个元素为中心同时向左和向右出发,复杂度O(n^2): (2)动 ...
- spring MVC 尝试传参json(应用部分)
spring 3.1后增加新的注解:@Requestbody,@Responsebody, 暂不论Requestdody, 若想让后端代码直接返回json字符串,可使用@Responsebody, 用 ...
- prototype,__proto__,constructor
proto属性: 所有对象都有此属性.但它不是规范里定义的属性,并不是所有JavaScript运行环境都支持.它指向对象的原型,也就是你说的继承链里的原型.通过Object.getPrototypeO ...
- 第五篇 基于.net搭建热插拔式web框架(拦截器---请求管道)
好了,前边我们把核心内容介绍完了,接下来要做的就是拦截用户的请求,并把请求转向沙箱内. 这里我们准备通过实现一个HttpModule类来完成请求的拦截与转发.新建一个HuberHttpModule类, ...
- JS 初级(三)接上
传送门 http://www.cnblogs.com/Sabo-dudu/p/5788197.html 现阶段我就了解了这么多,在以后的学习中,我会不断的更新,如果有什么不同的见解可以一块学习,谁有更 ...
- 在程序中执行shell命令
在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...