以下程序在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();
}
}
答案 0 :(得分:3)
从我的理解,它应该能够访问子类的公共方法。
是的,但只有当您调用它的表达式的编译时类型是该子类时。
因此,如果您将代码更改为:
MyClass obj = new MyClass();
那么它应该没问题。目前,obj
的编译时类型仅为Superclass
,其中不具有公共method
方法。
另请注意,MyClass.method
不覆盖Superclass.method
。即使对象的实际类型为method()
,对Superclass
内Superclass.method()
的调用也只会调用MyClass
。
答案 1 :(得分:1)
method
在private
中声明为Superclass
。 private
表示只能在该类中访问它。如果您希望子类能够访问它(或覆盖它),则必须将其声明为protected
。
答案 2 :(得分:0)
obj
引用了SuperClass
。因此,它只能看到SuperClass
,protected
或default
的{{1}}方法。
私有方法只在类中可见。
public