易学社
第二套高阶模板 · 更大气的阅读体验

抽象类是干什么用的?通俗理解编程中的“模板”设计

发布时间:2025-12-09 05:31:26 阅读:295 次

刚开始学编程时,总会遇到一些听起来很“高深”的词,比如“抽象”。其实它没那么复杂,换个说法就是:一种不能直接用的“模板类”。

为什么需要不能直接用的类?

想象你要开发一个宠物管理系统,里面要管理猫、狗、鸟这些动物。它们都会“叫”,但叫声各不相同。你总不能每个类里都随便写个“叫”的方法吧?这时候就需要统一规范。

抽象类就派上用场了。你可以定义一个叫 Animal 的抽象类,里面声明一个“叫”的方法,但不写具体怎么叫。子类比如 CatDog 必须自己实现这个方法。这样既保证了结构统一,又允许各自发挥。

代码长什么样?

abstract class Animal {
    public abstract void makeSound();

    public void sleep() {
        System.out.println("动物在睡觉");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}

上面这段 Java 代码中,Animal 是抽象类,makeSound 是抽象方法,没有具体实现。而 Dog 继承它后必须写出“怎么叫”。但像 sleep 这种普通方法,子类可以直接用,不用重写。

抽象类和普通类的区别

最大的不同是:你不能直接用 new Animal() 创建对象。它就像图纸,告诉你该有什么,但不能直接盖房子。只有具体子类才能实例化。

另外,抽象类可以包含抽象方法,也可以有普通方法、属性、构造函数。它更像是“半成品”,留几个空让子类填。

什么时候该用抽象类?

当你发现几个类有共性行为,但具体实现不一样时,就可以考虑抽象类。比如做图形计算,圆形、矩形都要算面积,但公式完全不同。定义一个 Shape 抽象类,强制子类实现 getArea() 方法,这样调用时就不怕出错。

它还能避免重复代码。公共的方法比如“打印信息”“记录日志”可以直接写在抽象类里,所有子类都能用。

和接口有什么不同?

初学者容易混淆抽象类和接口。简单说,抽象类强调“是什么”,比如“它是一个动物”;接口强调“能做什么”,比如“它能飞行”。Java 中一个类只能继承一个抽象类,但能实现多个接口,用途更灵活。

抽象类更适合有共同状态或行为基础的场景。比如多个子类都要用同一个字段或方法,放抽象类里最省事。