从抽象类继承静态变量

| 我有六个类,它们都扩展了相同的抽象类。抽象类具有一个静态变量,该静态变量指向一些JNI代码,我只希望在每个类实例化时加载一次。 据我了解,这将导致实例化该静态变量的一个实例,但是我想要的是每个扩展类都具有自己的变量静态实例,该实例对于给定的子类而言是唯一的。我想在我的抽象类中编写一些代码来修改和/或释放该抽象类。是否可以同时做这两个事情? 例如,我可以编写一个抽象类栏,其中包含变量foo和一个printFoo方法,该方法可打印foo的内容。然后,我依次实例化fooBar1,fooBar2和fooBar3,它们分别扩展了bar类并将foo初始化为静态块中的不同值。如果我调用ѭ0,我想打印由fooBar1构造函数初始化的foo的静态值。 可以用Java完成吗?     
已邀请:
您可以近似它,但是每个子类都需要单独的静态变量,以阻止子类覆盖彼此的值。通过获取器ѭ1a对其进行抽象是最容易的,以便每个子类都从正确的位置获取foo。 像这样
abstract class Bar
{
   // you don\'t have to have this in the base class 
   // - you could leave out the variable and make
   // getFoo() abstract.
   static private String foo;

   String getFoo() {
     return foo;
   }

   public void printFoo() {
      System.out.print(getFoo());
   }
}

class Foo1 extends Bar
{
   static final String foo1;

   public String getFoo() {
      return foo1;  // return our foo1 value
   }

   public Foo1() {
      foo1 = \"myfoo1\";
   }
}


class Foo2 extends Foo1
{
   static final String foo2;

   public String getFoo() {
      return foo2;  // return our foo2 value
   }

   public Foo2() {
      foo2 = \"myfoo2\";
   }
}
    
我有一个类似的问题。看起来Java无法隔离静态成员(属性)。我最终添加了抽象方法而不是属性:
public abstract class Abs {
    public void printX() {
        System.out.println(\"For \" + this.getClass() + \" x=\" + getX());
    }

    protected abstract Integer getX();

}

public class A extends Abs {
    protected static Integer x = 1;

    @Override
    protected Integer getX() {
        return x;
    }

}

public class B extends Abs {
    protected static Integer x = 2;

    @Override
    protected Integer getX() {
        return x;
    }

}

public class test {

    public static void main(String args[]) {
        Abs a = new A();
        a.printX();
        Abs b = new B();
        b.printX();
        Abs c = new A();
        a.printX();
        b.printX();
        c.printX();

    }
}
    

要回复问题请先登录注册