抽象类与接口的区别

来源:互联网 发布:淘宝联盟怎么加优惠券 编辑:程序博客网 时间:2024/06/05 10:03
     抽象类:抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为这个抽象类的所有派生类。

     接口:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

     区别

1)从设计理念层面上abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已,接口与实现类 之间的关系是"like-a"的关系。(举例:class AlarmDoor extends Door implements Alarm);

2)从语法定义层面上:在abstract class方式中,抽象类可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,只能有有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的 abstract class。abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑。在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为

    总结:

1、接口可以多重implement(实现),抽象类只能单一extends(继承)
2、接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。
3、接口字段定义默认为public static final,而抽象类的则默认为friendly。

原创粉丝点击