在 Java 里,“超类”就是父类( superclass ),所谓“超类构造方法”通常指 父类的构造方法,以及子类如何调用父类构造方法。下面系统讲一下。
如果父类有 无参构造方法(或没写构造方法),子类会隐式调用:
class Animal {
Animal() {
System.out.println("Animal 构造");
}
}
class Dog extends Animal {
Dog() {
// 隐式调用 super()
System.out.println("Dog 构造");
}
}
执行:
new Dog();
输出:
Animal 构造
Dog 构造
super() 显式调用父类构造class Dog extends Animal {
Dog() {
super(); // 可写可不写
}
}
class Animal {
Animal(String name) {
System.out.println(name);
}
}
class Dog extends Animal {
Dog() {
super("小狗");
}
}
⚠️ 注意:
super() 必须放在子类构造方法的第一行this() 同时使用❌ 编译错误示例:
class Animal {
Animal(String name) {}
}
class Dog extends Animal {
Dog() {
// 编译器找不到 Animal()
}
}
✅ 正确写法:
class Dog extends Animal {
Dog() {
super("小狗");
}
}
this() 和 super() 的关系this():调用本类其他构造方法super():调用父类构造方法class Dog extends Animal {
Dog() {
this("小狗");
}
Dog(String name) {
super(name);
}
}
从父类到子类,一层层执行
class A {
A() { System.out.println("A"); }
}
class B extends A {
B() { System.out.println("B"); }
}
class C extends B {
C() { System.out.println("C"); }
}
new C();
输出:
A
B
C
❓ 子类构造方法能不调用父类构造吗?
❌ 不能,编译器会自动加 super()
❓ 父类私有构造方法能被子类继承吗?
❌ 不能,但子类仍可调用(如果是同包或内部类)
如果你愿意,我也可以:
你想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。