[英]private method in inheritance in Java
我對在繼承中使用私有方法感到困惑,例如:
public class A {
private void say(int number){
System.out.print("A:"+number);
}
}
public class B extends A{
public void say(int number){
System.out.print("Over:"+number);
}
}
public class Tester {
public static void main(String[] args) {
A a=new B();
a.say(12);
}
}
基於上面的代碼,我對私有方法的繼承感到困惑,私有方法是從class A
繼承到B
嗎? 或者兩個類中的 say 方法完全無關? 由於代碼在 main() 方法中運行時出錯,因此class B
似乎無法從class A
調用私有方法。
如果您希望子類可以訪問需要保持private
的超類方法,那么protected
就是您要查找的關鍵字。
Private
只允許包含該成員的類訪問該成員。Protected
允許在類及其所有子類中訪問成員。Public
允許任何人訪問該成員。您收到錯誤的原因是say(int)
是私有的。 這與繼承無關。 您只能在其定義類中調用私有成員方法。
為了回答您的繼承問題, B.say()
是一種不同的方法 - 它甚至沒有覆蓋方法A.say()
因為派生類不能從其基類繼承私有方法。 只能繼承和/或覆蓋protected
和public
方法/變量。
這里有兩件事正在發生。
首先,請記住引用類型和對象類型之間的區別。
當你說
A a = new B();
所述參考是a
類型的A
,但對象的類型是B
。 所以當你調用a.say(12);
,您正在從A
API/接口/角度看B
其次,因為你是從A
角度看B
,你會得到一個錯誤,因為A
沒有名為say()
公共方法。 當然B
可以,但請記住,您將B
視為A
。 當你這樣做時,你將失去任何能力(除非你稍后施法,但現在不要擔心)引用那些A
不知道的B
方法。
最后, B
實際上從未從A
繼承say()
因為它首先看不到它,並且A
沒有任何人可以訪問的公共方法say()
。
現在,如果您真的想找點樂子,請將say()
在A
protected 並在B
私有,然后看看會發生什么。
私有意味着您只能在該類中訪問它,而不能在其他地方訪問它。
子類只能從它們的超類調用或覆蓋protected
或public
方法(或沒有訪問修飾符的方法,如果超類在同一個包中)。 private
方法保留在聲明它們的類中,對任何其他類都不可見,無論它如何相關。
私有方法在子類中繼承,這意味着私有方法在子類中可用,但不能從子類中訪問,因為在這里我們必須記住可用性和可訪問性的概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.