2013-11-04 131 views
2

我正在學習,我整個這一段代碼來:動態和靜態綁定在Java中

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繼承?我很困惑。我一直在尋找關於靜態和動態綁定幾天的很好的解釋,但是我沒有找到。

回答

2

簡單的java繼承。

子類的每個構造函數都需要調用它所繼承的類的構造函數。如果您自己不進行調用,則會爲您添加對擴展類的默認構造函數的調用。

在該實例中:

public WhiteTennisShoe(String s){ 
     System.out.println(s); 
    } 

相同:

public WhiteTennisShoe(String s){ 
     super(); 
     System.out.println(s); 
    } 
0

它是純粹的Java繼承。 每個Java構造函數都隱式插入super()作爲其第一行,除非顯式調用父構造函數,例如顯式調用super(「Exam 1」)的第二個TennisShoe構造函數中。

參見:Subclass Constructors