對不起,我是Java的新手。我試圖讓我的頭在Java的繼承和子類/超類關係。子類可以在Java中繼承哪些方法?
如果classA是classB的子類,classA的協議是否會包含屬於classA的所有方法,或者只有那些聲明爲public和package的方法?
classA的協議是否可以使用從其超類ClassB繼承的私有方法?
對不起,我是Java的新手。我試圖讓我的頭在Java的繼承和子類/超類關係。子類可以在Java中繼承哪些方法?
如果classA是classB的子類,classA的協議是否會包含屬於classA的所有方法,或者只有那些聲明爲public和package的方法?
classA的協議是否可以使用從其超類ClassB繼承的私有方法?
所有公共和受保護的方法和變量都將被繼承。任何在子類中具有相同簽名的方法都將覆蓋超類的行爲。該子類不會繼承私有方法和變量。如果在相同的位置和子類中,默認(a.k.a包可見性級別)將被繼承。
ClassB的私有方法對ClassA不可見。如果你想讓ClassA訪問ClassB的內部方法(沒有這些方法成爲ClassB的公共接口的一部分),你應該讓它們保護而不是私人。
私有方法不被繼承。只有受保護的方法,公共方法和默認方法被繼承。
A級將提供是公開的兩個ClassA和ClassB的
錯誤!默認不會被繼承。同一包中的任何類都可以看到默認的可見性方法。如果子類在同一個包中,那麼是的,否則不。 – Bohemian 2011-06-13 21:17:24
ClassA只有在它們在同一個包中時纔可以使用ClassB的默認方法。 – 2011-06-13 21:18:58
首先,單詞「繼承」的方法是不太正確的術語。你的意思是「可見」。
public
和protected
總是可見private
是不可見的公共方法,通過public
標記是提供給每一個類。 受protected
標記的受保護方法可用於子類和友好類,它們是同一包中的類。 友好的方法,沒有標籤(即默認)可用於友好的類。 專用方法僅適用於課程本身。
靜態方法,標記爲static
可供沒有對象訪問它們。這些被ClassName.foo(),SuperClassName.foo()調用(不必要,如果不重寫,foo()是可以接受的),或者ClassName.foo()(不必要,foo()是可以接受的) 動態(檢查詞彙? ?)只有當有一個類的對象時,纔可用(即默認)。例如:bar.foo(),this.foo()(不必要,foo()是可以接受的),或者super.foo()(如果不重寫則不必要,foo()可以接受) Overriden方法,註解爲@Override
可通過super.foo
因此,在ClassB的實例中,所有protected
和public
成員和方法的ClassA將可訪問。在靜態調用中,只能訪問靜態方法。
答案中的常見錯誤,波希米亞人除外。即使私有**也被繼承** - 它們只是不可用**來繼承代碼。但他們仍然在那裏工作,如果從祖先的方法調用。 – 2011-06-13 22:24:07