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
}
}
我无法理解 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
}
}