在Effective Java一书中写道:
现有的课程可以轻松改装以实施新课程 接口。您所要做的就是添加所需的方法 尚不存在,并将一个implements子句添加到类声明中。 例如,许多现有的类被改进以实现 它被引入平台时的可比接口。 通常,现有的课程不能进行改装以扩展新课程 抽象类。如果你想让两个类扩展相同 抽象类,您必须将抽象类置于高位 类型层次结构,它是两个类的祖先的子类。 不幸的是,这会对类型造成很大的附带损害 层次结构,强制共同祖先的所有后代扩展 新抽象类是否适合他们这样做 如此。
我在这里看不到抽象类和接口之间的区别。只是,我们可以将突出显示的单词class
替换为interface
,所有内容仍然是真的。
+--------------+
|Abstract Class|
+--------------+
^ ^
| |
+------+ +------+
|Class1| |Class2|
+------+ +------+
+--------------+
| Interface |
+--------------+
^ ^
| |
+------+ +------+
|Class1| |Class2|
+------+ +------+
有什么区别?
答案 0 :(得分:0)
抽象类可以包含非静态变量。
答案 1 :(得分:-1)
抽象类和接口之间存在一些重要的区别。其中一些列在下面。
抽象类可以在其中实现,但接口不能。
在接口中,您只能拥有静态最终变量(在intrface中声明的所有值都是自动常量和静态I.e不可变变量)但在抽象类中您可以拥有可变变量。
抽象类可以扩展,只有一个抽象类可以用于此,但是你可以在类中实现多个接口。