Abstract Class和Interface是Java语言中的两种定义抽象类的方式,它们之间有很大的相似性,可以理解为:interface是一种特殊形式的abstract class。
两者区别:
1:一个类(Class)只能继承一个超类(Super class),但是可以实现多个Interface。
2:在Abstract Class中,你可以定义非抽象(Abstract)的方法,但Interface不行。
3:在Abstract Class中,可以定义各种属性,在Interface中只能定义静态的不能被修改的数据成员即:static final。
4:在Interface中只需声明方法,而将方法体留给实现的class来完成,实现类如果未全部实现接口的方法则必须将类定义为抽象类。
5:在Interface中方法默认为public abstract的,变量默认为public static final的。
6:在Abstract Class中,abstract的method不能同时是static,native或synchronized。因为abstract的语义就是方法是多态的,需要子类的实现。static方法则是在本类中实现,不具有多态行为。
注意:
一个类可以被声明成一个抽象类即使它没有任何抽象方法。但当一个类至少存在一个抽象方法(abstract method)时,则它必须声明为抽象类。 抽象类不能被实例化(be instantiated),但可以实例化非抽象子类(concrete subclass)。 当一个子类继承某个抽象类时,它可以有两个选择:
(1)部分实现或完全不实现父类的所有抽象方法,但此时子类必须声明为抽象类。
(2)实现父类所有的抽象方法,此时子类不必声明为抽象类。