gpt4 book ai didi

java - 在堆中创建的抽象类的私有(private)实例变量在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:05 25 4
gpt4 key购买 nike

abstract class A {
private int a;
public A(int x) {
a = x;
}
public int getA() {
return a;
}
}

class B extends A {
public B(int x) {
super(x);
}
}

class TestB {
public static void main(String args[]) {
B b = new B(5);
System.out.println(b.getA());
}
}

在这种情况下,当我说 B b=new B(5); 时,调用父类(super class)构造函数并将私有(private)实例变量初始化为 5。所以当我说 getA( )B 引用的 b 对象上返回 5。由于 class A 的实例变量 a 是私有(private)的,它不会被 class B 继承。那么实例变量 a 是在哪里创建的(在堆上)。如果它是一个 public,它将成为堆上 class B 实例的一部分。此外,class A 是一个抽象类,因此无法实例化。

最佳答案

无论实例变量是私有(private)的、公共(public)的、来自父类(super class)的、来自抽象父类(super class)的,实例变量的分配位置都没有区别

通常顺序是这样的

  1. 引用B.class对象
  2. Object 实例变量 block (包括 GC 的辅助字段、同步监视器等)
  3. A 实例变量 block (在本例中只有 a)
  4. B 实例变量 block (本例中没有)

然而,JVM 的每个实现都可以自由选择它如何分配它们中的每一个

并且访问控制由编译器和 JVM 强制执行

关于java - 在堆中创建的抽象类的私有(private)实例变量在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20540188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com