2017-08-31 144 views
1
class Super 
{ 
    Super() 
    { 
     System.out.println("This is Super Constructor"); 
    } 
} 
class Sub extends Super 
{ 
    Sub() 
    { 
     //super() is automatically added by the compiler here! 
     System.out.println("This is Sub Constructor"); 
     //super(); I can't define it here coz it needs to be the first statement! 
    } 
} 
class Test 
{ 
    public static void main(String...args) 
    { 
     Sub s2=new Sub(); 
    } 
} 

輸出:
這是超級構造
這是子構造有沒有在JAVA中執行超類的構造函數之前的子類的構造函數?

反正這樣做?
或者你不能在Super()之前訪問Sub()?
我知道超類或繼承類首先被初始化,然後是子類,只是爲了學習的目的而做這個!

+0

如果你想要做到這一點,那麼你需要檢查你的對象模型。在這種情況下,您可能會錯誤地使用父子關係。 – Amit

回答

0

繼承人一個簡單的答案。 繼承的概念是關於關係。 從技術上講,狗類是動物類的孩子。 。 。 在創建對象,狗類,首先是一個動物在其成爲列爲DOG

...希望這clearifies事情。 。所以它不可能按照你詢問的方式來執行

2

在構造函數中,如果您自己沒有提供此調用,編譯器將始終爲您添加對super() 的調用。

如果用反編譯一下,你的子構造函數將是這樣的:

Sub() 
{ 
    super(); 
    System.out.println("This is Sub Constructor"); 
} 

所以,不,這是不可能的。

0

至於其他的答案說是不可能的。不知道你爲什麼試圖做到這一點,但更好地重新考慮你的實現,因爲你始終想確保繼承的字段被初始化,因爲子類實現可能依賴於它。

+0

歡迎來到堆棧溢出!此答案不會添加任何尚未在其他答案中提供且具有較少細節的新信息。請注意發佈無益的答案 – Milk

0

如上所述,超級構造函數總是被調用。也許你應該重寫你的問題並解釋,爲什麼你需要這個。

相關問題