抽象类和抽象方法

抽象方法
仅有声明而没有方法体

抽象类
包含抽象方法的类。

  • 抽象类和抽象方法都必须用abstract关键字来修饰
  • 抽象类不能被实例化
  • 含有抽象方法的类必须被声明为抽象类,抽象类可以没有抽象方法
  • 抽象类的子类必须覆写所有抽象方法后才能被实例化,否则这个子类还是个抽象类。
  • 抽象类也可以有构造方法,但这些构造方法必须在子类中被调用
  • 抽象类中可以有普通成员变量,静态变量访问类型可以是任意的
  • 抽象类中可以有静态方法
  • 抽象类中的方法可以是public,protected类型

接口

与抽象类的不同点:

  • 接口里的数据成员必须初始化,只能是public static final 类型,且数据成员均为常量,接口中没有普通成员变量
  • 接口里的方法只能是public类型,且必须全部声明为abstract,即默认为public abstract类型,接口内全是抽象方法
  • 接口中不能有静态方法,1.8后 在接口中可以使用default和static关键字来修饰接口中的普通方法
  • 接口是可以被实例化,但不能直接被实例化,只能通过其子类进行实例化。
  • 接口支持多继承,接口之间继承使用extends关键字,实现接口使用implements关键字

应用区别:

  • 接口更多是在系统架构方面发挥作用,主要用于定义模块之间的通信契约;而抽象类在代码方法 发挥作用,可以使用代码块的重用;
  1. interface 接口名 [extends 接口1,接口2] {
  2. // 0个或多个常量定义
  3. // 0个或多个抽象方法定义
  4. }
  5. class A implements 接口A,接口B{}