我无法理解 JVM 如何给出输出 10。我们无法创建抽象类的对象,那么 JMV 内部如何管理抽象类的对象创建。
abstract class A {
int a = 10;
}
class B extends A {
int a = 20;
}
public class Sample {
public static void main(String [] args) {
A obj = new B();
System.out.println(obj.a); // prints 10
System.out.println(((B)obj).a); // prints 20
}
}
最佳答案
它不会创建抽象类 A 的实例。它会创建具体类 B 的实例。
但是,由于用于保存对象引用的变量 obj
是 A 类型,并且实例成员(与方法不同)无法被重写,因此 obj.a
返回类 A
的 a
变量。
您可以通过添加到代码中来说服自己 B 的实例已创建:
public class Sample
{
public static void main(String [] args) {
A obj = new B();
System.out.println(obj.a); // prints 10
System.out.println(((B)obj).a); // prints 20
}
}
关于java - JVM如何创建抽象类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120445/