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("汪汪");
}
}
✅ 好处:
name、eat() 只写一次抽象方法没有方法体,子类必须实现,否则编译报错。
这保证了:
所有子类都有某个行为,但实现方式不同
比如:
如果不强制,容易漏写,程序逻辑不完整。
抽象类可以作为类型使用,不关心具体子类。
Animal a = new Dog();
a.sound();
✅ 好处:
这是面向对象设计的核心优势。
很多人会问:接口也能抽象方法,为啥还要抽象类?
区别很重要:
| 对比项 | 抽象类 | 接口 |
|---|---|---|
| 能有成员变量 | ✅ | ❌(基本常量) |
| 能有普通方法 | ✅ | ❌(Java 8+ 可 default) |
| 单继承 | ✅ | 多实现 |
| 适合 | “是什么”(IS-A) | “能做什么”(能力) |
抽象类强调:是一类东西
接口强调:具备某种能力
Java 要抽象类,是为了在不写完整实现的情况下,复用代码、约束子类、支持多态。
如果你愿意,我也可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。