私は勉強していて、このコードに出くわしました:
class Shoe{
public Shoe(){
this("This is 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");
}
}
出力は次のようになると思いました。
A white tennis shoe is created
子クラス WhiteTennisShoe のコンストラクターのみが呼び出されるためです。ただし、実際の出力はまったく異なります。
Exam 1
This is a Tennis Shoe
Derived Class
A white tennis shoe is created
これは、動的バインディングと静的バインディングが原因ですか? それとも純粋なJava継承ですか?私は本当に混乱しています。数日間、静的バインディングと動的バインディングの適切な説明を探していましたが、何も見つかりませんでした。