JVM如何创建抽象类的对象?

时间:2015-03-18 11:08:50

标签: java jvm

我无法得到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
    }
}

1 个答案:

答案 0 :(得分:4)

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

但是,由于用于保存对象引用的变量obj是A类型,并且由于无法覆盖实例成员(与方法不同),obj.a将返回{{1}类a的变量。

你可以说服自己,通过添加到你的代码来创建B的实例:

A