JVM如何创建抽象对象class?

How JVM creates object of abstract class?

我无法理解 JVM 如何给出输出 10。我们无法创建抽象对象 class,那么 JMV 如何在内部管理抽象对象创建 class。

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
    }
}

它不会创建抽象的实例 class A。它会创建具体的实例 class B。

但是,由于用于保存对对象的引用的变量 obj 是类型 A,并且实例成员(与方法不同)不能被覆盖,obj.a returns class 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
    } 
}