理解Java中的继承概念

Nir*_*mal 12 java inheritance

我只是刷新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的值...

提前致谢....

Pet*_*hev 11

这称为实例变量隐藏 - 链接.基本上你有两个独立的变量,因为引用的类型是Super它将使用index变量from Super.


Dan*_*ker 8

对象有类型,变量有类型.因为你把:

Super sup = new Sub();
Run Code Online (Sandbox Code Playgroud)

现在你有一个sup类型的变量,Super它引用了一个类型的对象Sub.

当您在对象上调用方法时,将根据对象的类型选择运行的方法,这就是它打印"Sub"而不是"Super"的原因.

当您访问对象中的字段时,将根据变量的类型选择字段,这就是您获得5的原因.