继承抽象类与实现接口



在《高效Java》一书中写道:

现有类可以很容易地进行改装,以实现新的界面您所要做的就是添加所需的方法,如果它们还不存在,并向类声明中添加一个implements子句。例如,为了实现将其引入平台时的可比较接口。一般来说,不能对现有类进行改造以扩展新类抽象类。如果你想让两个类扩展相同的抽象类,您必须将摘要类的抽象类是否适合他们这样做所以

我看不出抽象类和接口之间有什么区别。只是,我们可以将突出显示的单词class替换为interface,并且进一步的一切仍然成立。

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

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

有什么不同?

抽象类可以具有非静态变量。

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

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

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

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

最新更新