抽象类(abstract class)
- 抽象类主要用于被继承,被继承后子类需要重写父类的所有抽象方法。
- 抽象类可以有抽象方法和普通成员方法,即抽象类不一定有抽象方法,但有抽象方法的一定是抽象类。
- 抽象类不能实例化。
- 抽象类里面可以有普通成员变量和普通成员方法。
- 抽象类可以有构造方法,创建子类对象使用,由子类构造方法可以初始化父类成员变量。
- 抽象类的抽象方法没有具体实现,该抽象方法用于被子类重写后通过抽象类这个父类调用子类重写后的方法
接口(interface):比抽象类更抽象的纯抽象代码结构。
- 接口里面的普通方法统一为抽象方法,默认修饰符public abstract。
- 接口里面的普通成员变量统一被编译器规定为public static final类型,即为常量,在定义时必须赋值。
- 接口没有构造方法。
- 接口里面可以有静态成员方法,但是必须有内容。
- 类继承类用extends,类继承接口用implement,接口继承接口用extends。
- 在普通类继承抽象类时,理工类必须重写抽象类中的抽象方法。在接口中,实现接口也必须重写接口中所有抽象方法,除非子类是抽象类。
- 普通类只能继承一个类,但是一个普通类可以实现多个接口,一个接口可以继承多个接口(实现了多继承)。
- 接口不能被实例化。
- 默认方法(default method):JDK1.8允许接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被子类实现,只能被子类对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法。
- 接口只能继承接口且支持多继承。抽象类可以实现接口不能继承接口(不用重写接口方法),抽象类可以继承具体类也可以继承抽象类。
接口,抽象类,普通类继承关系总结
- 接口只能继承接口,且支持多继承。
- 抽象类可以实现接口(不用重写接口里的方法),抽象类可以继承普通类和抽象类,不能继承接口。
- 普通类只能继承普通类和抽象类,可以实现接口支持多实现。