簡體   English   中英

Java中子類可以繼承哪些方法?

[英]Which methods can a subclass inherit in Java?

抱歉,我是 Java 的新手。 我試圖了解 inheritance 和 Java 中的子類/超類關系。

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

classA 的協議能否具有從其超類 ClassB 繼承的私有方法?

首先,“繼承”這個詞並不完全正確。 你的意思是“可見”。

  • publicprotected始終可見
  • private不可見
  • 默認(又名“包”)可見性 - 即沒有指定的可見性 - 只有當子類在同一個 package 中時才可見(對於同一個包中的任何class 也是如此)

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

ClassA 將繼承 classB 的所有公共和受保護方法。 它不會包含 classB 的私有方法。

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

每個 class 都可以使用由public標記的公共方法。 protected標記的受保護方法可用於子類和友好類,它們是同一個 package 中的類。 友好的類可以使用無標記(即默認)的友好方法。 私有方法僅適用於 class 本身。

由 static 標記的static方法可以在沒有 object 的情況下訪問它們。 這些由 ClassName.foo()、SuperClassName.foo() 調用(如果沒有被覆蓋,則不需要,foo() 是可以接受的)或 ClassName.foo()(不必要,foo() 是可以接受的) 動態的(檢查詞匯??? ) 無標記(即默認值)僅在具有 class 的 object 時可用。 例如:bar.foo()、this.foo()(不需要,foo() 可以接受)或@Override ()(如果沒有被覆蓋,則不需要,foo() 可以接受)可通過super.foo

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

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

Class A 將提供在 classA 和 ClassB 中都公開的方法

暫無
暫無

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

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