簡體   English   中英

Java中的構造函數是否具有訪問修飾符繼承?

[英]Is there access modifier inheritance for constructors in Java?

在Java中擴展類時,我可以提供覆蓋較高或相等訪問修飾符的方法,但不能覆蓋較低的訪問修飾符。 不允許以下內容,因為ClassB foo方法必須是public

public class ClassA {
    public void foo() {}
}
public class ClassB extends ClassA {
    @Override
    protected void foo() {}
}

似乎這不適用於構造函數。 我可以執行以下操作:

public class ClassA {
    public ClassA () {}
}
public class ClassB extends ClassA {
    protected ClassB() {}
}

為什么會這樣? 還有其他規則也適用於構造函數但不適用於方法嗎?

因為ClassB的構造函數不會override ClassA的構造函數。 這是一種完全不同的方法,僅(顯式或隱式)調用ClassA的構造函數。 因此,可見度也可以降低。

另一個證明點是,如果您自己沒有調用很多ClassA構造函數,則將調用ClassA的默認構造函數。 如果ClassA沒有一個,並且您沒有在ClassB的構造函數中調用另一個,則編譯器將感到不滿意。

// This WILL call super() implicitly, without you actually having to write it
protected ClassB() {}

我假設您已經知道,如果您根本不為類編寫ANY構造函數,則會隱式添加默認構造函數。 (再次使用此默認構造函數,只需調用super() ,請參見上文)。

暫無
暫無

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

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