结论:Java 的抽象类是有构造方法的。
抽象类可以有构造方法
super(...) 调用抽象类的构造方法,完成抽象类中成员变量的初始化。抽象类不能直接 new
// 编译错误
AbstractClass a = new AbstractClass(); // ❌
子类实例化时会调用抽象类的构造方法
abstract class AbstractClass {
protected int value;
public AbstractClass(int value) {
this.value = value;
System.out.println("抽象类构造方法");
}
}
class SubClass extends AbstractClass {
public SubClass(int value) {
super(value); // ✅ 调用抽象类构造方法
System.out.println("子类构造方法");
}
}
如果没有显式定义构造方法
abstract class AbstractClass {
// 等价于:AbstractClass() {}
}
接口 vs 抽象类
| 问题 | 结论 |
|---|---|
| 抽象类能不能有构造方法 | ✅ 可以 |
| 抽象类能不能被实例化 | ❌ 不能 |
| 构造方法什么时候被使用 | 子类实例化时 |
如果你愿意,我也可以结合 JVM 层面 或 面试题常见坑点 再给你讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。