2

私は勉強していて、このコードに出くわしました:

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継承ですか?私は本当に混乱しています。数日間、静的バインディングと動的バインディングの適切な説明を探していましたが、何も見つかりませんでした。

4

2 に答える 2

0

これは純粋な Java 継承です。すべての Java コンストラクターは、super("Exam 1") を明示的に呼び出す 2 番目の TennisShoe コンストラクターなど、親コンストラクターが明示的に呼び出されない限り、最初の行として暗黙的に super() を挿入します。

参照:サブクラス コンストラクター

于 2013-11-04T17:14:25.673 に答える