抽象类和抽象方法
抽象方法
仅有声明而没有方法体
抽象类
包含抽象方法的类。
- 抽象类和抽象方法都必须用abstract关键字来修饰
- 抽象类不能被实例化
- 含有抽象方法的类必须被声明为抽象类,抽象类可以没有抽象方法
- 抽象类的子类必须覆写所有抽象方法后才能被实例化,否则这个子类还是个抽象类。
- 抽象类也可以有构造方法,但这些构造方法必须在子类中被调用
- 抽象类中可以有普通成员变量,静态变量访问类型可以是任意的
- 抽象类中可以有静态方法
- 抽象类中的方法可以是public,protected类型
接口
与抽象类的不同点:
- 接口里的数据成员必须初始化,只能是public static final 类型,且数据成员均为常量,接口中没有普通成员变量
- 接口里的方法只能是public类型,且必须全部声明为abstract,即默认为public abstract类型,接口内全是抽象方法
- 接口中不能有静态方法,1.8后 在接口中可以使用default和static关键字来修饰接口中的普通方法
- 接口是可以被实例化,但不能直接被实例化,只能通过其子类进行实例化。
- 接口支持多继承,接口之间继承使用extends关键字,实现接口使用implements关键字
应用区别:
- 接口更多是在系统架构方面发挥作用,主要用于定义模块之间的通信契约;而抽象类在代码方法 发挥作用,可以使用代码块的重用;
interface 接口名 [extends 接口1,接口2] {
// 0个或多个常量定义
// 0个或多个抽象方法定义
}
class A implements 接口A,接口B{}