簡體   English   中英

在JAVA中是否有在超類的構造函數之前執行子類的構造函數的方法?

[英]Is there anyway in JAVA to execute Sub Class's Constructor before the Super Class's Constructor?

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();
    }
}  

輸出:
這是超級構造函數
這是子構造函數

反正這樣做嗎?
還是您不能在Super()之前訪問Sub()?
我知道超級類或繼承的類首先被初始化,然后是子類,僅出於學習目的而這樣做!

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

如果使用反編譯器,則Sub構造函數將如下所示:

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

所以不,這是不可能的。

它將始終始終先調用基類的構造函數(parent),然后再調用發起的類(child)。 在您的情況下, super()將首先執行。

好讀: 父或子構造函數是第一個執行的?

正如其他答案所說的那樣。 不確定為什么要這樣做,但最好重新考慮一下實現,因為您總是希望確保繼承的字段首先被初始化,因為子類實現可能依賴於它。

如前所述,超級構造函數總是被調用。 也許您應該重寫您的問題並說明原因。

這是一個簡單的答案。 繼承的概念是關於IS-A關系的。 因此從技術上講,Dog類是Animal Class的孩子。 創建對象后,Dog類首先是一種動物,然后才被歸類為DOG

...希望這樣可以弄清楚事情。 所以不可能按照你的要求去做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM