抽象类
特点
- 抽象类可以包含抽象方法和具体方法。抽象方法是没有实现的方法,必须由子类实现。具体方法是已经实现的方法,子类可以直接继承和使用。
- 子类继承抽象类时,必须实现抽象类中的所有抽象方法,除非子类自己也声明为抽象类。
- 抽象类可以拥有普通的成员变量和方法,也可以拥有静态成员变量和方法。
- 抽象类的子类只能继承一个抽象类,支持单继承的特性。
使用场景
- 当多个类需要共享一些方法实现时,可以将这些方法抽取到一个抽象类中。
- 当一个类需要被继承扩展,并且其中部分方法需要子类重写实现时,可以将这些方法定义为抽象方法。
接口
特点
- 接口只能包含常量和抽象方法。常量在接口中默认是
public static final
的,方法默认是public abstract
的。 - 类通过实现接口来获得接口中定义的方法,一个类可以实现多个接口。
- 接口之间可以进行多继承,一个接口可以继承多个接口。
- 接口可以被其他接口继承扩展。
使用场景
- 当多个类需要实现一组统一的方法时,可以定义一个接口,并让这些类实现该接口。
- 当需要实现多态的特性时,可以使用接口来实现。
区别和联系
在使用上区别不大,都是偏向顶层的父类。
抽象类可以包含抽象方法和具体方法,而接口只能包含抽象方法。抽象方法在抽象类中有默认的实现,而接口的抽象方法需要子类实现。
抽象类的子类只能继承一个抽象类,但可以实现多个接口。接口之间可以进行多继承。
在编程过程中,接口偏向于有能力、动作行为之类,抽象类更加偏向于事物的本质。