在 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 Cook {
void make() {
prepare();
cook();
serve();
}
abstract void prepare();
abstract void cook();
void serve() {
System.out.println("上菜");
}
}
✅ 适用场景:
抽象类可以强制子类实现关键逻辑,避免遗漏。
abstract class Shape {
abstract double area();
}
✅ 适用场景:
抽象类比接口:
示例:
abstract class BaseService {
protected String name;
BaseService(String name) {
this.name = name;
}
void log() {
System.out.println(name + " 执行");
}
abstract void run();
}
✅ 适用场景:
HttpServlet(抽象类)InputStream / OutputStreamAbstractController✅ 特点:
❌ 多维度行为扩展 → 用接口 ❌ 完全无共性代码 → 用接口 ❌ 需要多继承 → 用接口
抽象类用于“是什么(is-a)”关系,强调共性与部分实现;接口用于“能做什么(can-do)”关系。
如果你愿意,我也可以给你一个抽象类 vs 接口的选择流程图或真实项目示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。