抽象类(Abstract Class) 和 多态(Polymorphism) 在面向对象编程中关系非常紧密,可以说:抽象类是实现多态的一种重要手段。
下面从几个角度来说明它们的关系。
abstract 修饰的类abstract class Animal {
abstract void sound();
}
多态是指:
同一种行为,在不同对象上有不同的表现形式
常见形式:
Animal a = new Dog();
a.sound(); // 实际调用的是 Dog 的实现
抽象类规定了一组行为(方法),但不关心具体实现。
abstract class Shape {
abstract double area();
}
不同子类有不同实现:
class Circle extends Shape {
double area() { return 3.14 * r * r; }
}
class Rectangle extends Shape {
double area() { return w * h; }
}
Shape s1 = new Circle();
Shape s2 = new Rectangle();
s1.area(); // 调用 Circle 的 area
s2.area(); // 调用 Rectangle 的 area
➡ 同一方法 area(),不同对象表现不同 = 多态
| 对比 | 普通类 | 抽象类 |
|---|---|---|
| 能否实例化 | 能 | 不能 |
| 是否强制子类实现方法 | 否 | 是(抽象方法) |
| 是否适合作为“规范” | 弱 | 强 |
抽象类更强调:
“子类必须是什么样子的”
| 特性 | 抽象类 | 接口 |
|---|---|---|
| 成员变量 | 可以有 | 默认常量 |
| 方法实现 | 可有可无 | Java 8+ 可 default |
| 继承关系 | 单继承 | 多实现 |
| 设计目的 | “是什么” | “能做什么” |
两者都支持多态,但抽象类更偏向类层级结构。
抽象类通过定义统一的方法规范,并由不同子类提供不同实现,从而自然形成多态。
如果你愿意,我也可以用 生活例子 / 考试角度 / 代码对比 再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。