接口和抽象类的区别和联系

来源:互联网 发布:2017商务笔记本 知乎 编辑:程序博客网 时间:2024/06/05 08:29

具体:http://blog.csdn.net/ttgjz/article/details/2960451

接口和抽象类有什么区别
你选择使用接口和抽象类的依据是什么?

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

=====================================
含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象来中定义抽象方法必须放在具体子类中实现,所以呀,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有 方法,那么,子类也必须定义为抽象类。
接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public abstract 。接口中的变量是全局常量,即public static final修饰的。
看一下他们在语法上的区别吧!
1,抽象类里可以有构造方法,而接口内不能有构造方法。
2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5,抽象类中可以包含静态方法,接口内不能包含静态方法。
6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。
7,一个类可以实现多个接口,但只能继承一个抽象类。
再补充点两者在应用上的区别:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用

序号 区别点 抽象类 接口 1 定义 包含一个抽象方法的类 抽象方法和全局常量的集合 2 组成 构造方法、抽象方法、普通方法、常量、变量 抽象方法、常量 3 使用 子类继承抽象类extends 子类实现接口implements 4 关系 抽象类可以实现多个接口 接口不能继承抽象类,但允许继承多个接口 5 常见设计模式 模板设计 工程设计、代理设计 6 对象 都通过多想的多态性产生实例化的对象 同左 7 局限 抽象类有单继承的局限,而接口没有这个局限 同左 8 实际 作为一个模板 作为一个标准或者表示一种能力 9 选择 如果抽象类和接口都可以使用的时候,优先使用接口,避免单继承的局限 同左 10 特殊 个人抽象类中可以包含多个接口,一个接口中可以包含多个抽象类 同左



大原则:一个类千万不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果抽象类和接口都可以使用的时候,优先使用接口,避免单继承的局限。

0 0