抽象类和接口
抽象类:
(1)抽象类必须使用abstract来修饰,抽象方法也必须使用abstract来修饰,抽象方法不能有方法体。
(2)抽象类不能被实例化,即使抽象类中不包含抽象方法,也不能创建实例。
(3)抽象类可以包含成员变量,方法,构造器,初始化块,内部类(接口和枚举)5个成分。抽象类中构造器主要用于被子类调用,不能用于创建实例。
(4)含有抽象方法的类只能被定义成抽象类。
abstract不能修饰成员变量,局部变量,构造器。
接口类:
(1)接口中可以包含成员变量(只能是静态方法public static final),方法(public
abstract,JDK1.8开始可以定义一个默认方法)和内部类(public static)。不包含构造器和初始化块。
区别:
(1)抽象类可以有构造器和代码块,接口中没有
(2)抽象类可以包含普通成员变量,接口中没有普通成员变量。
(3)抽象类可以包含非抽象的普通方法,接口中的方法必须都是抽象的。
(4)抽象类中抽象方法的访问类型可以是public,protected,但接口中的抽象方法默认是Public abstract
(5)抽象类中可以包含静态方法,接口中不能包含静态方法。
(6)抽象类中的静态成员变量的访问类型可以任意,接口中的访问类型只能是public static final
(7)一个类可以实现多个接口,但只能继承一个类。