抽象类
抽象类可以包含成员变量、方法、构造器、初始化块、内部类
- 必须使用abstract来修饰,抽象方法也必须用abstract 来修饰,抽象方法没有方法体。可以有普通方法。
- 抽象类不能被实例化,这个应该都知道。
- 你的抽象方法有抽象类,那你的类必须是抽象类
接口
接口不是类,不能new,用interface来规定,实现类用implements
相同
接口和抽象类都不能被实例化。
接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
不同
1.接口里只能包含抽象方法、静态方法和默认方法,不能为普通方法提供实现,而抽象类可以。
2.接口里只能定义常量,不能定义普通成员变量,抽象类则可以。
3.接口里不包含构造器;抽象类可以包含构造器,但抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
4.接口里不能包含初始化块;但抽象类则完全可以包含初始化块。
5.一个类最多只能有一个直接父类(包括抽象类);但一个类可以实现多个接口,通过实现多个接口可以弥补Java单继承的不足。