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

标签 java oop jakarta-ee

我有一个继承自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/

相关文章:

java - 在项目外部加载图像

java - 接受正则表达式并生成 NFA (Java)

java - 将小型 JSP/Servlet/JDBC 项目重构为 SpringMVC/Hibernate 有多容易

java - 在 Web 应用程序中获取当前 URL

java - 来自 null 变量的 NullPointerException 错误。当 ListView 变空时

java - Maven 依赖项在中央存储库中没有 jar,并且由于没有 Artifact ,maven 构建失败

c# - 我可以在我的算法中使用哪种设计模式?

ruby - 在 `initialize` 方法中访问实例变量

php - 扩展 DOMDocument 和 DOMNode : problem with return object

java - Hibernate 中的 Order 和 OrderLine 关系映射。在哪里放置 @OnetoMany 和/或 @ManytoOne