我无法得到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
}
}
答案 0 :(得分:4)
它不会创建抽象类A的实例。它会创建具体类B的实例。
但是,由于用于保存对象引用的变量obj
是A类型,并且由于无法覆盖实例成员(与方法不同),obj.a
将返回{{1}类a
的变量。
你可以说服自己,通过添加到你的代码来创建B的实例:
A