继承是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进行验证之前扩展关键字,从而转换为 字节码,尽管我们只能在创建对象后的运行时使用它的特性。
关于私有成员,虽然它将由子类继承,但不可访问。检查继承被“实现”是什么意思?我承认这个问题同样含糊不清。