在 Java 中使用抽象类(abstract class),主要是为了代码复用、规范约束和面向对象设计。下面从“为什么要用”以及“解决了什么问题”两个角度来说明。
当多个类有大量相同的属性和行为时,可以把共性放到抽象类中,子类只关注差异。
abstract class Animal {
String name;
void eat() {
System.out.println(name + "在吃东西");
}
abstract void sound(); // 子类必须实现
}
class Dog extends Animal {
void sound() {
System.out.println("汪汪");
}
}
✅ 好处:
抽象类可以定义算法骨架,把可变部分交给子类。
abstract class Game {
void play() {
start();
run();
end();
}
abstract void start();
abstract void run();
abstract void end();
}
✅ 好处:
抽象方法强制子类提供具体实现,否则编译报错。
abstract class Shape {
abstract double area();
}
✅ 好处:
抽象类可以:
接口(Java 8 前)不行。
abstract class Account {
protected double balance;
public void deposit(double m) {
balance += m;
}
abstract void withdraw(double m);
}
✅ 适合:
Java 只能单继承,抽象类常用于:
Animal
├── Mammal
│ ├── Dog
│ └── Cat
└── Bird
| 对比项 | 抽象类 | 接口 |
|---|---|---|
| 是否有状态 | ✅ 有 | ❌ 无(Java 8+ 常量) |
| 构造方法 | ✅ 有 | ❌ 无 |
| 继承关系 | is-a | can-do |
| 单/多实现 | 单继承 | 多实现 |
| 默认实现 | ✅ 可 | ✅(Java 8+) |
✅ 用抽象类:
✅ 用接口:
Java 抽象类用于:把共性交给父类,把变化留给子类,同时约束子类行为,提升复用性和可维护性。
如果你愿意,我也可以用**真实业务场景(如订单、支付、权限)**来举例说明抽象类的使用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。