文章目录

  • 抽象类和抽象方法
  • 接口
  • 抽象类与接口的区别


抽象类和抽象方法

关键字:abstract:由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类。

  • 抽象方法只有功能声明,没有方法体。
  • 抽象类可以包含抽象方法,也可以不包含抽象方法,抽象类可以有非抽象方法。——也就是说,抽象类中是可能有方法体的,只要那个方法不是抽象方法就行。
  • 抽象类不能被实例化,就是不能产生实例化对象,所以必须被继承才能使用。——也就是说,抽象类一定是一个父类。抽象类(abstract)一定不能和final同时使用。
  • 子类继承抽象父类并实现父类的所有抽象方法才可以实例化,如果有未实现的抽象方法则该子类仍为一个抽象类,无法创建对象。
  • 抽象类可以实现接口,抽象类也可以继承抽象类
  • 抽象类拥有构造方法,对自身进行初始化,供子类使用

接口

关键字:interface

  • 接口不能实例化,只能被实现。
  • 接口的所有方法都是抽象的,不能有方法体。接口只能做方法声明。(java8中 接口可以有实现方法,使用default修饰)
  • 如果一个类实现接口时没有实现全部接口方法,那么该类也只能为抽象类。
  • 接口不可以实现接口,但可以继承一个或多个接口
  • 特征
  • 所有成员变量都是public、static、final类型,并且必须赋初值。
  • 所有方法都是public、abstract类型
  • 所有嵌套类型(类或接口)都是public、static类型。
  • 因为成员变量都是static的,所以接口里的成员变量不再属于子类的某个对象,而是属于这个接口,子类的对象里就没有父类这个成员变量。如果要使用该变量,直接接口名.成员变量 即可调用。
  • 接口没有构造方法

抽象类与接口的区别

  • 抽象类中的方法可以有方法体,接口中不行
  • 抽象类的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型
  • 一个类只能继承一个抽象类,而一个类可以实现多个接口