重写的私有方法在访问Java中的子类public方法时导致异常

时间:2013-05-13 09:21:45

标签: java

以下程序在main方法内的行“obj.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();

    }
}

3 个答案:

答案 0 :(得分:3)

  

从我的理解,它应该能够访问子类的公共方法。

是的,但只有当您调用它的表达式的编译时类型是该子类时。

因此,如果您将代码更改为:

MyClass obj = new MyClass();
那么它应该没问题。目前,obj的编译时类型仅为Superclass,其中具有公共method方法。

另请注意,MyClass.method 覆盖Superclass.method。即使对象的实际类型为method(),对SuperclassSuperclass.method()的调用也只会调用MyClass

答案 1 :(得分:1)

methodprivate中声明为Superclassprivate表示只能在该类中访问它。如果您希望子类能够访问它(或覆盖它),则必须将其声明为protected

答案 2 :(得分:0)

obj引用了SuperClass。因此,它只能看到SuperClassprotecteddefault的{​​{1}}方法。
私有方法只在类中可见。

public