继承是java中的编译时还是运行时

继承是java中的编译时还是运行时,java,inheritance,Java,Inheritance,我被告知继承是运行时的,但我想问,如果继承是运行时的,那么当我们试图通过子类对象访问父类数据成员时,编译器如何在编译时生成错误: class PrivateData { private int x = 50; void show() { System.out.println(x); } } class ChildPrivateData extends PrivateData { public static void main(String s

我被告知继承是运行时的,但我想问,如果继承是运行时的,那么当我们试图通过子类对象访问父类数据成员时,编译器如何在编译时生成错误:

class PrivateData {
    private int x = 50;

    void show() {
        System.out.println(x);
    }
}

class ChildPrivateData extends PrivateData {

    public static void main(String s[]) {
        ChildPrivateData c1 = new ChildPrivateData();
        System.out.println(c1.x);
    }
}

在Java中,继承是在编译时定义的。我认为您把它与多态性混淆了,简单地说,多态性表示Java选择只在运行时运行的重写方法。

您被编译时和运行时混淆了。我不碰你的密码。但看看这里的例子

String result = returnInt();  // #1

public int returnInt() {
 return 1;
}
如果您看到,在第
#1
行,您认为编译器是否执行
returnInt()
方法来给出编译时错误?不是吗

答案是


规范中已经提供给编译器的所有规则。java中的继承是通过“extends”关键字实现的,它是为编译时继承保留的。 在本例中,您已将基类变量定义为private。private成员不会被继承。只能通过某些基类方法在子类中访问私有成员

class PrivateData{
  private int x =50;

  void show(){
    System.out.println(x);
  }
}

class ChildPrivateData extends PrivateData {

  public static void main(String s[]){
      ChildPrivateData  c1 = new ChildPrivateData();
      System.out.println(c1.show());
  }
}

继承总是在编译时实现的 在进入jvm进行验证之前扩展关键字,从而转换为 字节码,尽管我们只能在创建对象后的运行时使用它的特性。
关于私有成员,虽然它将由子类继承,但不可访问。

检查继承被“实现”是什么意思?我承认这个问题同样含糊不清。