我在寻找考试准备问题时遇到了这段代码。 我不明白什么是调用超类构造函数 在这段代码?
输出是--->猫美洲狮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);
}
}
答案 0 :(得分:3)
如果你有一个扩展其他类的类,例如Cougar extends Feline
,那么必须是对构造函数顶部的超类的调用。如果不编写一个,Java假定您打算调用默认的超类构造函数。所以你的构造函数:
public Cougar(){
System.out.print("cougar ");
}
实际上解释为:
public Cougar(){
super();
System.out.print("cougar ");
}
因此调用超类构造函数。有趣的是要注意,因为所有类都是类Object
的扩展,所以在你将要编写的每个构造函数的开头都调用一个超类构造函数 - 要么是一个你已经包含的显式类。或者没有参数,或者如果你没有指定默认的超类构造函数。
答案 1 :(得分:1)
在这种情况下,Java编译器将自动插入对super()
的调用。我建议阅读this Java tutorial,特别是这一部分:
注意:如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题。
答案 2 :(得分:0)
如果你没有包含对parent构造函数的调用,那么在当前类的第一行执行之前将调用parent(no arg)构造函数