从抽象类继承静态变量

dre*_*rew 13 java inheritance static abstract-class

我有六个类,它们都扩展了相同的抽象类.抽象类有一个静态变量,指向一些JNI代码,我只想在每个类的实例化时加载一次.

根据我的理解,这导致实例化这个静态变量的一个实例,但我想要的是每个扩展类都有自己的变量静态实例,这个实例对于给定的子类是唯一的.我想在我的抽象类中编写一些代码来修改和/或释放抽象类.是否有可能同时做这两件事?

因此,作为一个例子,我可以编写一个带有变量foo的抽象类栏和一个打印foo内容的printFoo方法.然后我按顺序实例化fooBar1,fooBar2和fooBar3,每个扩展bar类并将foo初始化为静态块中的不同值.如果我调用foobar1.printFoo我想打印由fooBar1构造函数初始化的foo的静态值.

这可以在java中完成吗?

mdm*_*dma 6

您可以对其进行近似,但是每个子类都需要单独的静态变量,以阻止子类覆盖其他每个值.最简单的方法是通过getter对其进行抽象,getFoo以便每个子类从正确的位置获取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";
   }
}
Run Code Online (Sandbox Code Playgroud)