抽象类abstract
(父类包含子类的共同特征。一个父类设计得非常抽象,以至于它都没有任何具体的实例)
- 不能用new操作符创建抽象类的实例。但是抽象类可以作为一种数据类型。
- 抽象类的构造方法定义为protected,因为它只能被子类使用。
- 包含抽象方法的类必须是抽象类,抽象类可以不包含抽象方法。
- 即使父类是具体的,子类也可以是抽象的。子类可以覆盖父类的方法并将它定义为abstract。
接口interface
(指明多个对象的共同行为)
- 不能用new操作符创建接口的实例。可以使用接口作为引用变量的数据类型或类型转换结果。
- 接口是一种与类相似的结构,只包括常量和抽象方法。
- 接口中所有成员变量的修饰符都是public static final,方法都是public abstract,所以Java允许忽略这些修饰符。
- 一个类只能继承一个父类,但一个类却可以实现一个或多个接口。
- Cloneable接口没有常量和方法,称为标记接口。实现Cloneable接口的类的对象可以使用Object类中的clone()方法克隆。
相同点
都不能被实例化。接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。
不同点
- 抽象类可以提供成员方法的实现细节,接口中的方法不能有具体的实现,只有实现接口的类才能实现接口中定义的方法;
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
- 抽象类可以有静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。