Java:父方法访问子类的静态变量?

标签 java inheritance static polymorphism

我正在尝试理解我在 Java 中围绕多态性的方式。我创建了一个父类,其中包含太多所有子级都将以相同方式使用的通用方法。
每个子类的子类都共享静态信息,这些变量或信息只会在父类声明的方法中使用。
希望从 Parent 方法访问静态变量的问题似乎不太可能,
这是一个声明每个实例的公共(public)信息的解决方案,但由于会有 1000 多个实例,因此会浪费内存。
我的意思的简单阐述是以下代码:

    class testParent {
    static int k;
    public void print()
    {
      System.out.println(k);    
    }
   }

   class testChild2 extends testParent 
   {

    static
    {
        testChild2.k =2;
    }
   }

   public class testChild1 extends testParent{
    static
    {
        testChild1.k = 1;
    }

    public static void main(String[] args)
    {

        new testChild1().print();
        new testChild2().print();

        new testChild1().print();
    }
 }

我期望的输出是
1
2
1.
但发生的是:
1
2
2
人们可能会认为,在每个子类的启动时,都会设置该子类的静态变量,然后所有引用该子类的方法都可以访问相应的“k”值。
但实际发生的是,所有子类都在所有子类共享的同一个静态变量中进行编辑,因此破坏了我对每个子类及其实例使用静态变量并在父类中使用公共(public)方法访问这些变量的全部观点.



知道如何做到这一点吗?

最佳答案

一种选择是通过抽象(非静态)方法访问子类的静态数据:

abstract public class Parent {
   protected abstract int getK();

   public void print() {
      System.out.println(getK());
   }
} 

public class Child1 extends Parent {
   private static final int CHILD1_K = 1;

   protected int getK() { return CHILD1_K; }
}

public class Child2 extends Parent {
   private static final int CHILD2_K = 2;

   protected int getK() { return CHILD2_K; }
}

关于Java:父方法访问子类的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5394712/

相关文章:

Java:我根本不理解这个泛型定义

javascript - 设置涉及逻辑的函数构造函数属性的最佳方法

Java SSH Ganymed - 尝试使用用户名和密码连接时出现随机错误

java - Java中从控制台获取输入: Is it blocking or non-blocking?

c++ - 一个模板类如何继承另一个模板类?

java - 初始化程序对静态字段的非法引用

C main() 函数可以是静态的吗?

c++ - 在 C++ 中缓存昂贵的数据——函数范围的静态变量与可变成员变量

Java - 使用条件在 super 方法中指定参数

java - 如何使用 java 在 liquibase 中区分两个新模式?