Java 继承中构造方法调用顺序问题:Checket 类编译错误分析

代码示例:

class Base{
Base(){
System.out.println('Base');
}
}

public class Checket extends Base{
Checket(){
System.out.println('Checket');
super();
}
public static void main(String[] arg){
Checket c = new Checket();
}
}

**问题:**上述代码编译错误,原因是什么?

选项:

A. Checket 类的构造方法中 super() 应该放在第一行 B. Checket 类的构造方法中 super() 应该放在最后一行 C. Checket 类的构造方法中缺少 super() 调用 D. Base 类没有无参构造方法

**答案:**B

解析:

在 Java 继承中,子类的构造方法会自动调用父类的构造方法,而 super() 方法用于显式调用父类构造方法。

  • 子类构造方法的第一行必须是 super() 或 this(),用于指定调用哪个父类构造方法。
  • 如果没有显式调用 super() 或 this(),编译器会自动在子类构造方法的第一行添加 super(),调用父类的无参构造方法。

在本例中,Checket 类继承了 Base 类,Checket 类的构造方法中 super() 调用放在了最后一行,导致编译错误。这是因为在调用 super() 之前,就已经调用了 Checket 类的构造方法,而 super() 应该在子类构造方法的第一行,确保父类构造方法在子类构造方法之前被调用。

正确的写法:

class Base{
Base(){
System.out.println('Base');
}
}

public class Checket extends Base{
Checket(){
super();
System.out.println('Checket');
}
public static void main(String[] arg){
Checket c = new Checket();
}
}

结论:

子类构造方法中 super() 的位置至关重要,它应该放在第一行,以确保父类构造方法在子类构造方法之前被调用。

Java 继承中构造方法调用顺序问题:Checket 类编译错误分析

原文地址: https://www.cveoy.top/t/topic/oVOG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录