[英]What is invoking the super class constructor here?
我在寻找考试准备问题时遇到了这段代码。 我不明白这段代码在调用超类构造函数是什么?
输出是--->猫美洲狮CC
THL
public class Feline{
public String type = "f ";
public Feline(){
System.out.print("feline ");
}
}
-
public class Cougar extends Feline {
public Cougar(){
System.out.print("cougar ");
}
public static void main(String[] args){
new Cougar().go();
}
void go(){
type = "c ";
System.out.print(this.type + super.type);
}
}
当您具有扩展其他类的类时,例如Cougar extends Feline
,则必须在构造函数的顶部调用父类。 当您不编写一个时,Java假定您打算调用默认的超类构造函数。 所以你的构造函数:
public Cougar(){
System.out.print("cougar ");
}
实际上被解释为:
public Cougar(){
super();
System.out.print("cougar ");
}
因此,调用了超类构造函数。 有趣的是,由于所有类都是Object
类的扩展,因此在您将要编写的每个构造函数的开头都有一个对超类构造函数的调用-包含或不包含参数的显式构造函数,或默认的超类构造函数(如果未指定)。
在这种情况下,Java编译器将自动插入对super()
的调用。 我建议阅读本Java教程 ,特别是这一部分:
注意:如果构造函数未明确调用超类构造函数,则Java编译器会自动将调用插入到超类的无参数构造函数中。 如果超类没有无参数构造函数,则将出现编译时错误。 对象确实具有这样的构造函数,因此如果对象是唯一的超类,就没有问题。
如果您不包括对Parents构造函数的调用,则parent(no arg)构造函数将在当前类的第一行执行之前被调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.