我有以下代码:
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
行。当你这样做时,编译器会自动选择不带参数的父类(super class)构造函数;如果没有这样的构造函数可用,这将是一个编译错误(尽管如果根本没有为父类(super class)定义构造函数,它将创建自己的构造函数)。
因此,被调用的 TennisShoe
构造函数是
public TennisShoe (){
this("This is a Tennis Shoe");
System.out.println("Derived Class");
}
当然,它会调用另一个 TennisShoe
构造函数。
关于java - 继承: How child class interact with its parent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19811198/