我只是刷新java的oops功能.所以,我对继承概念有点困惑.为此,我有以下示例代码:
class Super{
int index = 5;
public void printVal(){
System.out.println("Super");
}
}
class Sub extends Super{
int index = 2;
public void printVal(){
System.out.println("Sub");
}
}
public class Runner {
public static void main(String args[]){
Super sup = new Sub();
System.out.println(sup.index+",");
sup.printVal();
}
}
Run Code Online (Sandbox Code Playgroud)
现在上面的代码给出了输出为:5,Sub.
在这里,我们重写了printVal()方法,因此可以理解它只是访问子类方法.
但我无法理解为什么它从超级类访问x的值...
提前致谢....
对象有类型,变量有类型.因为你把:
Super sup = new Sub();
Run Code Online (Sandbox Code Playgroud)
现在你有一个sup类型的变量,Super它引用了一个类型的对象Sub.
当您在对象上调用方法时,将根据对象的类型选择运行的方法,这就是它打印"Sub"而不是"Super"的原因.
当您访问对象中的字段时,将根据变量的类型选择字段,这就是您获得5的原因.