gpt4 book ai didi

java - 继承类中的静态成员变量

转载 作者:行者123 更新时间:2023-12-01 11:38:55 24 4
gpt4 key购买 nike

我有一个继承自Class_A的Class_A和Class_B:

public class Class_A {

public static int check_static = 10;

Class_A() {
check_static = 3;
}

public static void main(String... args) {
System.out.println(check_static);
}
}

public class Class_B extends Class_A {

Class_B() {
check_static = check_static+1;
}

public static void main(String... args) {
System.out.println(check_static); // case 1
Class_B class_b = new Class_B();
System.out.println(check_static); // case 2
}
}

为什么Class_B的构造函数访问check_static的值和Class_B的main方法访问不同的值?

第二种情况是因为我没有在 Class_B 中实例化 Class_A,因此它从 Class_A 中选择成员值 (10),但我不确定情况 2 是如何工作的。

为什么Class_B的构造函数从Class_A的构造函数中选取它的值?

最佳答案

当编译器即将完成其工作时,如果尚未添加父类(super class)构造函数,它将代表您引入对父类(super class)构造函数的调用。

规则是,任何类构造函数中的第一条指令必须是对同一类的无参数构造函数的调用,即使用 this() 或使用 super() 关键字。

因此,编译后,您的 Class_B (请注意,我对您的类名不太满意,因为它们不遵守 Java 命名约定),您的类构造函数将如下所示:

Class_B(){
super();
check_static = check_static + 1;
}

这将导致调用父类(super class)构造函数,即Class_A(),流程如下:

  1. 调用 Class_B() 将导致调用 Class_A()
  2. 调用 Class_A() 后,类成员变量 check_static 的值将赋给 3
  3. 现在回到 Class_B() 构造函数,check_static 将增加 1
  4. 将值打印到控制台将得出总和 4

关于java - 继承类中的静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716880/

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