0

下面的程序在主方法内的“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();

    }
}
4

3 回答 3

3

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

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

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

MyClass obj = new MyClass();

那么它应该没问题。目前,编译时类型obj是 just Superclass,它没有公共method方法。

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

于 2013-05-13T09:22:59.610 回答
1

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

于 2013-05-13T09:23:14.487 回答
0

obj有参考SuperClass。所以它只能看到,或SuperClass的方法。 私有方法仅在类内部可见。protecteddefaultpublic

No Overriding happens here.
于 2013-05-13T09:23:58.907 回答