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

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

最佳答案

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

但是,由于用于保存对象引用的变量 obj 是 A 类型,并且实例成员(与方法不同)无法被重写,因此 obj.a 返回类 Aa 变量。

您可以通过添加到代码中来说服自己 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/

相关文章:

java - 无法将带有 Gradle 的单体 Spring Boot 应用程序转换为多模块

java - Tomcat 和 Matlab 编译器运行时内存不足错误

java - 为什么 JVM 消耗的内存比指定的 -Xms 少?

java - 是否有 -noverify jvm 标志的替代方案?

Java 字节码缺少局部变量表

android - Eclipse:我无法在 Ubuntu 11.10 上调试我的应用程序

java - java程序的编译和执行?

java - 如果包含来自另一个目录的包,如何识别类

java - 向 ArrayList 添加元素时出现 NullPointerException

java - 如何知道处理器风扇的速度?