簡體   English   中英

重寫的私有方法在訪問Java中的子類公共方法時導致異常

[英]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 即使對象的實際類型是MyClassSuperclassmethod()調用也只會調用Superclass.method()

methodSuperclass聲明為private private表示只能在該類中訪問。 如果希望子類能夠訪問它(或重寫它),則必須聲明它為protected

obj具有SuperClass引用。 因此,它只能看到protecteddefaultpublic SuperClass方法。
私有方法僅在類內部可見。

No Overriding happens here.

暫無
暫無

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

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