在面向对象编程(如 Java、C#、C++ 等)中,抽象类(abstract class)主要用于“抽取共性、约束子类、不能单独实例化”的场景。下面从使用时机、典型场景、与接口的区别三个角度说明。
如果一些子类有很多重复逻辑,应把公共部分放到抽象类中,避免代码重复。
例子:
abstract class Animal {
String name;
void sleep() {
System.out.println(name + " is sleeping");
}
abstract void sound(); // 子类必须实现
}
Dog 和 Cat 都能复用 sleep()。
抽象类不能被 new,能保证:
接口只能定义行为(Java 8 前),抽象类可以:
抽象类适合表达继承体系:
Animal ← DogShape ← Circle如果是“能做什么”(has-a / can-do),更适合用接口。
abstract class Game {
void play() {
start();
playGame();
end();
}
abstract void playGame();
}
如:
BaseControllerBaseServiceAbstractRepositoryabstract class Account
abstract class BankAccount extends Account
abstract class CreditAccount extends Account
| 场景 | 用抽象类 | 用接口 |
|---|---|---|
| 需要代码复用 | ✅ | ❌ |
| 需要多继承 | ❌ | ✅ |
| 定义能力/契约 | ❌ | ✅ |
| 表达“是什么” | ✅ | ❌ |
| 表达“能做什么” | ❌ | ✅ |
当多个类“是一类东西”,并且有共同实现逻辑时,用抽象类;
当只关心“能做什么”,用接口。
如果你有具体语言(Java / C# / Python)或业务场景,我可以给你更贴切的例子。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。