我有以下代码:
class Shoe {
public Shoe(){
this("thise a shoe");
System.out.println("Base Class");
}
public Shoe(String s){
System.out.println(s);
}
}
class TennisShoe extends Shoe {
public TennisShoe (){
this("This is a Tennis Shoe");
System.out.println("Derived Class");
}
public TennisShoe(String s){
super("Exam 1");
System.out.println(s);
}
}
class WhiteTennisShoe extends TennisShoe {
public WhiteTennisShoe(String s){
System.out.println(s);
}
}
class Test{
public static void main(String [] args){
new WhiteTennisShoe("A White Tennis Shoe is Created");
}
}
输出为:
考试1
这是网球鞋
派生类
制作了白色网球鞋
我只是不明白为什么编译器没有从
WhiteTennisShoe类中的构造函数public WhiteTennisShoe(String s)
在TennisShoe类中访问构造函数public TennisShoe(String s)
最佳答案
在这个构造函数中
public WhiteTennisShoe(String s){
System.out.println(s);
}
您没有指定应使用
TennisShoe
的构造函数-没有super
行。当您执行此操作时,编译器会自动选择不带参数的超类构造函数。如果没有可用的此类构造函数,则将产生编译错误(尽管如果根本没有为超类定义任何构造函数,它将生成自己的构造函数)。因此,被调用的
TennisShoe
构造函数为public TennisShoe (){
this("This is a Tennis Shoe");
System.out.println("Derived Class");
}
然后哪个会调用另一个
TennisShoe
构造函数。