当前位置: 代码迷 >> 综合 >> Java技术——Interface与abstract类的区别
  详细解决方案

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

热度:60   发布时间:2024-01-20 11:46:42.0

0. 前言  

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

本文原创,转载请注明出处:Java技术——Interface与abstract类的区别_SEU_Calvin的博客-CSDN博客

 

1. 两者关系总结  

(1)抽象类和接口都不能够实例化。一个类如果继承了某个抽象类可以选择不对抽象方法全部实现(仍为抽象类),但是实现接口的必须要实现该接口的所有方法。

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

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

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

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

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

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

 

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

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

2. 结束语   

通过以上从实现程度、一继承多接口、内部成员结构、以及设计理念四个角度对接口和抽象类的区别进行理解之后,便可以在选择使用接口或者抽象类时做出更加合理的设计。转载请注明出处:Java技术——Interface与abstract类的区别_SEU_Calvin的博客-CSDN博客