抽象类

抽象类用 abstract class 声明,表示这个类还不完整,不能直接创建对象,只能作为子类的共同模板

抽象方法

抽象方法只有声明,没有方法体:

abstract class Animal {
    abstract void sound();
}

子类继承抽象类后,必须实现全部抽象方法;否则子类也必须声明为抽象类。

抽象类可以有什么

  • 成员变量
  • 构造方法
  • 普通方法
  • 抽象方法
  • static 成员

抽象类有构造方法,但不能直接 new。构造方法会在创建子类对象时被调用,用于初始化父类部分。

设计意义

抽象类适合表达一组对象的共同本质:

  • 共同字段和通用方法写在父类。
  • 不确定的行为写成抽象方法,交给子类实现。
abstract class Shape {
    abstract double area();
 
    void printArea() {
        System.out.println(area());
    }
}

抽象类 vs 普通类

对比普通类抽象类
能否实例化可以不可以
是否能有抽象方法不可以可以
主要作用创建具体对象提供继承模板

抽象类 vs 接口

  • 抽象类偏向“同一类事物”的模板,强调 is-a
  • 接口偏向“能力规范”,强调 can-do
  • Java 类只能继承一个抽象类,但可以实现多个接口。

相关:子类与继承接口与实现多态