继承抽象类与实现接口

时间:2017-10-24 20:51:26

标签: java

在Effective Java一书中写道:

  

现有的课程可以轻松改装以实施新课程   接口。您所要做的就是添加所需的方法   尚不存在,并将一个implements子句添加到类声明中。   例如,许多现有的类被改进以实现   它被引入平台时的可比接口。   通常,现有的课程不能进行改装以扩展新课程   抽象类。如果你想让两个类扩展相同   抽象类,您必须将抽象类置于高位   类型层次结构,它是两个类的祖先的子类。   不幸的是,这会对类型造成很大的附带损害   层次结构,强制共同祖先的所有后代扩展   新抽象类是否适合他们这样做   如此。

我在这里看不到抽象类和接口之间的区别。只是,我们可以将突出显示的单词class替换为interface,所有内容仍然是真的。

+--------------+
|Abstract Class|
+--------------+
   ^        ^ 
   |        |
+------+ +------+
|Class1| |Class2|
+------+ +------+


+--------------+
|   Interface  |
+--------------+
   ^        ^ 
   |        |
+------+ +------+
|Class1| |Class2|
+------+ +------+

有什么区别?

2 个答案:

答案 0 :(得分:0)

抽象类可以包含非静态变量。

答案 1 :(得分:-1)

抽象类和接口之间存在一些重要的区别。其中一些列在下面。

  1. 抽象类可以在其中实现,但接口不能。

  2. 在接口中,您只能拥有静态最终变量(在intrface中声明的所有值都是自动常量和静态I.e不可变变量)但在抽象类中您可以拥有可变变量。

  3. 抽象类可以扩展,只有一个抽象类可以用于此,但是你可以在类中实现多个接口。