跳到主要内容

抽象类 Abstract class

抽象类的特性

抽象类中可以声明抽象方法,但这些方法只负责定义方法签名,不在抽象类中实现。

抽象方法必须定义在抽象类内,这种方法必须由非抽象子类实现。

抽象方法不应为私有,因为需要由子类来实现这些方法。

抽象类中可以存在构造方法、普通属性和普通方法,这些成员可被子类直接利用。抽象类的构造方法不能直接实例化对象,但在子类实例化时会被调用。

抽象类可以继续被抽象子类继承,继承链上的子类可选择继续抽象,直到某个具体子类为止。

继承抽象类的具体子类必须实现继承链上所有的抽象方法,否则该子类仍为抽象类。

抽象类无法直接实例化,它的主要作用是作为其他类的基类。定义在抽象类中的常量和公共方法可被子类访问与使用。

抽象类不能声明为 final 类,以免失去被继承的意义。

使用抽象类的细节

我在实践中发现抽象类适合用于为一组相关类提供统一接口与基础逻辑。抽象类的抽象方法让子类实现自己的细节,而抽象类本身可提供默认行为以减少重复代码。通过这种方式,笔者可以在抽象类中定义通用结构,再由子类各自完成个性化实现。

示例代码

public abstract class DBManager {
protected abstract void registerDatabase();

protected abstract void connectDatabase();

protected void operateDatabase() {
registerDatabase();
connectDatabase();
}
}
public class MySQLManager extends DBManager {
public MySQLManager() {
}

public void registerDatabase() {
System.out.println("MySQLManager registering MySQL driver...");
}

public void connectDatabase() {
System.out.println("MySQLManager connecting to MySQL database...");
}
}