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

Adh*_*ham 2 java polymorphism inheritance static

我试图了解我在 Java 中绕过多态的方式。我创建了一个父类,它有太多的通用方法,所有的孩子都会以相同的方式使用。
每个子类的子类都共享静态信息,这些变量或信息将用于仅在父类中声明的方法中。
希望从父方法访问静态变量的问题似乎不太可能,
它是声明每个实例的公共信息的解决方案,但由于将有 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();
    }
 }
Run Code Online (Sandbox Code Playgroud)

我期望的输出是
1
2
1。
但发生的情况是:
1
2
2
人们可能会认为在每个子类的初始化时设置了这个子类的静态变量,然后所有引用这个子类的方法都可以访问相应的 'k ' 价值。
但实际发生的情况是,所有子类都在同一个静态变量中进行编辑,该变量与所有子类共享,因此破坏了我为每个子类及其实例使用静态变量并在父类中使用通用方法访问这些变量的全部意义。



知道怎么做吗?

Mic*_*vis 5

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

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; }
}
Run Code Online (Sandbox Code Playgroud)