java - 我不明白这个继承功能

标签 java inheritance static

考虑以下非法代码:-

class WrongCode{
    int i;
    static int i;
}

在这里,编译器说我们在同一个类中有重复的字段。

现在,考虑同一文件中的以下类。

class Parent{
    int i = 10;
}

class Child extends Parent{
    static int i = 100;
}

public class Main{
    public static void main(String ... aaa){
        Parent ob = new Child();
        System.out.println(ob.i);   // This prints Parent's i
    }
}

既然实际对象是Child,那么ob不应该引用Child的i吗?如果它引用父级的“i”,那么在某种程度上,它也在自己的类中拥有父级的“i”以及它自己的静态“i”,这是不允许的。

子静态 i 掩盖父 i。而且Parent的i不是静态的,那么如何直接使用instance而不是className来访问它呢?

最佳答案

您在 Parent 类中有实例字段 i,并且它仍然是 Child 类中的实例字段。

System.out.println(ob.i);  // must be 10

看看 - Oracle Java Tutorial - Hiding Fields

关于java - 我不明白这个继承功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754318/

相关文章:

ios - 共享变量的组合而不是继承

java - 是否可以在 Java 中声明一个类或另一个类的对象?

c# - 在负载平衡服务器上使用应用程序范围的变量

java - 通过 UDP 传输字节缓冲区

java - 如何为多个级别创建 Hibernate Criteria

java - 如何在 javaFX 中创建带有左、中、右部分的工具栏?

java - ActionBarSherlock - 与方法覆盖相关的选项卡导航错误

java - 我的 Java 代码出现错误,但我看不出它有什么问题。帮助?

Java的final方法使用静态绑定(bind),但JVM在编译时使用 "invokevirtual"指令

scala - 静态方法更可组合吗?