在 Java(以及大多数支持“抽象类”的面向对象语言)里,抽象类虽然不能自己被实例化,但它依然可以有构造方法,而且构造方法主要不是为了“创建抽象类对象”,而是为了给子类用的。
下面分点说清楚它“干什么用”。
抽象类通常包含子类共有的属性或初始化逻辑,构造方法用来:
abstract class Animal {
String name;
Animal(String name) {
this.name = name;
System.out.println("动物初始化");
}
abstract void sound();
}
class Dog extends Animal {
Dog(String name) {
super(name); // 调用抽象类构造方法
}
void sound() {
System.out.println("汪汪");
}
}
➡ Dog 创建时,先执行 Animal 的构造方法
super(...)abstract class A {
A(int x) {}
}
class B extends A {
B() {
super(10); // 必须写
}
}
❌ 错误:
abstract class A {
abstract A(); // 不允许
}
原因:
✅ 场景一:强制子类提供必要参数
abstract class Shape {
Shape(String color) {
if (color == null) throw new IllegalArgumentException();
}
}
✅ 场景二:统一初始化逻辑
abstract class Service {
Service() {
initLogger();
}
}
✅ 场景三:模板方法模式
abstract class Game {
Game() {
start();
play();
end();
}
}
抽象类的构造方法不是用来创建自己的对象,而是用来初始化“子类的共性部分”。
如果你愿意,我也可以用 UML图 / 对比接口 / 实际项目例子 再帮你讲一层。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。