[英]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.