[英]Overridden private method is causing exception in accessing subclass public method in Java
下面的程序在main方法的“ obj.method()”行中給出了編譯錯誤。 錯誤是“看不到超類類型的方法method()”。 據我了解,它應該能夠訪問子類的公共方法。 誰能解釋其背后的概念?
class Superclass{
private void method(){
System.out.println("Inside superclass method");
}
}
public class MyClass extends Superclass{
public void method(){
System.out.println("Inside subclass method");
}
public static void main(String s[]){
Superclass obj = new MyClass();
obj.method();
}
}
據我了解,它應該能夠訪問子類的公共方法。
是的,但是僅當您要調用的表達式的編譯時類型是該子類時。
因此,如果將代碼更改為:
MyClass obj = new MyClass();
那應該沒問題 目前,在編譯時類型obj
就是Superclass
,它不具有公共method
方法。
還要注意的是MyClass.method
不會覆蓋Superclass.method
。 即使對象的實際類型是MyClass
在Superclass
對method()
調用也只會調用Superclass.method()
。
method
在Superclass
聲明為private
。 private
表示只能在該類中訪問。 如果希望子類能夠訪問它(或重寫它),則必須聲明它為protected
。
obj
具有SuperClass
引用。 因此,它只能看到protected
, default
或public
SuperClass
方法。
私有方法僅在類內部可見。
No Overriding happens here.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.