2011-06-13 95 views
5

對不起,我是Java的新手。我試圖讓我的頭在Java的繼承和子類/超類關係。子類可以在Java中繼承哪些方法?

如果classA是classB的子類,classA的協議是否會包含屬於classA的所有方法,或者只有那些聲明爲public和package的方法?

classA的協議是否可以使用從其超類ClassB繼承的私有方法?

+1

答案中的常見錯誤,波希米亞人除外。即使私有**也被繼承** - 它們只是不可用**來繼承代碼。但他們仍然在那裏工作,如果從祖先的方法調用。 – 2011-06-13 22:24:07

回答

0

ClassA將繼承所有classB的public和protected方法。它不包含classB的私有方法。

+1

默認可見度如何? – Bohemian 2011-06-13 21:18:04

+0

默認可見度是私人的。 – 2011-06-14 08:18:09

+2

默認可見度是(驚喜!)默認 – unbeli 2011-06-16 22:38:27

1

所有公共和受保護的方法和變量都將被繼承。任何在子類中具有相同簽名的方法都將覆蓋超類的行爲。該子類不會繼承私有方法和變量。如果在相同的位置和子類中,默認(a.k.a包可見性級別)將被繼承。

0

ClassB的私有方法對ClassA不可見。如果你想讓ClassA訪問ClassB的內部方法(沒有這些方法成爲ClassB的公共接口的一部分),你應該讓它們保護而不是私人。

-1

私有方法不被繼承。只有受保護的方法,公共方法和默認方法被繼承。

A級將提供是公開的兩個ClassA和ClassB的

+2

錯誤!默認不會被繼承。同一包中的任何類都可以看到默認的可見性方法。如果子類在同一個包中,那麼是的,否則不。 – Bohemian 2011-06-13 21:17:24

+1

ClassA只有在它們在同一個包中時纔可以使用ClassB的默認方法。 – 2011-06-13 21:18:58

10

首先,單詞「繼承」的方法是不太正確的術語。你的意思是「可見」。

  • publicprotected總是可見
  • private是不可見的
  • 默認(又名「包」)的可見性 - 即沒有指定可見性 - 可見只有在子類是在同一包(因爲它是將用於在同一個包中的任何類)
0

公共方法,通過public標記是提供給每一個類。 受protected標記的受保護方法可用於子類和友好類,它們是同一包中的類。 友好的方法,沒有標籤(即默認)可用於友好的類。 專用方法僅適用於課程本身。

靜態方法,標記爲static可供沒有對象訪問它們。這些被ClassName.foo(),SuperClassName.foo()調用(不必要,如果不重寫,foo()是可以接受的),或者ClassName.foo()(不必要,foo()是可以接受的) 動態(檢查詞彙? ?)只有當有一個類的對象時,纔可用(即默認)。例如:bar.foo(),this.foo()(不必要,foo()是可以接受的),或者super.foo()(如果不重寫則不必要,foo()可以接受) Overriden方法,註解爲@Override可通過super.foo

因此,在ClassB的實例中,所有protectedpublic成員和方法的ClassA將可訪問。在靜態調用中,只能訪問靜態方法。