Java技术——Interface与abstract类的区别

来源:互联网 发布:小博士隔音膜 淘宝网 编辑:程序博客网 时间:2024/06/01 10:04

0. 前言  

抽象类与接口Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在对多态提供了非常好的支持。他们两者有很大的相似,甚至可以互换,但是也有区别。对于他们的选择反应了你对该问题的理解。

本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52755868

 

1. 两者关系总结  

1抽象类和接口都不能够实例化。一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。

但是实现接口的必须要实现该接口的所有方法。抽象类可以选择不用全部实现。

 

2抽象类提供了一个继承的概念,它的出发点就是为了继承,只能继承一个父类。但是接口不同,一个类可以同时实现多个接口。

(不管这些接口之间有没有关系,所以接口弥补了抽象类不能多重继承的缺陷。)

 

3抽象类中可以包含成员变量、抽象方法、具体方法、构造方法等;(抽象类中不一定必须有抽象方法,而有抽象方法一定是抽象类

而接口中只能存在成员变量和抽象方法。这些成员变量都会自动变为public static final,即静态的不可变的成员数据(一般都不在接口中定义成员数据)。


这里有个小问题,为什么接口的成员变量都会自动变为为public static final

这是因为接口不可实例化,它的所有元素都不必是对象层面的,显然static 满足了这一点。

而且如果接口的变量能被修改,那么一旦一个子类实现了这个接口,并修改了接口中的没有被final修饰的变量,而该子类的子类再次修改这个变量的时候,造成的结果就是虽然实现了相同的接口,但接口中的变量值是不一样的,显然final满足了这一点。

 

4抽象类是对类抽象,是面向整个类的自下而上的设计理念,一般是先有各种子类,再有把这些有关系的子类加以抽象为父类的需求。

而接口是对行为的抽象,是面向行为的自上而下的设计理念,接口根本就不需要知道子类的存在,只需要定义一个规则即可。


2. 结束语   

通过以上从实现程度、一继承多接口、内部成员结构、以及设计理念四个角度对接口和抽象类的区别进行理解之后,便可以在选择使用接口或者抽象类时做出更加合理的设计。转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52755868

2 0
原创粉丝点击