Java继承:如何在Super中声明静态变量并在子类中实例化它

时间:2012-10-19 18:04:52

标签: java oop inheritance

如何在Super中声明静态变量并在子类中实例化它

实施例

class A
{
  static Queue<String> myArray;

  public void doStuff()
  {
     myArray.add(someMethod.getStuff());
  } 

}
class B extends A
{
  myArray = new LinkedList<String>();

}

class C extends A
{
  myArray = new LinkedList<String>();

}

显然这不起作用。但是你会如何宣布一个变量;然后用超类中的变量做一些常用功能;然后确保每个子类获得它自己的静态LinkedList?

3 个答案:

答案 0 :(得分:5)

你不能沿着这些方向做事。你可以做的最接近的是在超类中使用抽象(非静态)方法并用它做一些事情。

但一般来说,你不能强制子类做任何静态,你不能像你想要的那样从超类访问子类的静态字段。

答案 1 :(得分:0)

Static variable绑定到一个类而不是一个实例。如果您需要为子类提供单独的静态变量,则需要在每个子类中声明它们。

答案 2 :(得分:0)

因为,您需要操作子类特定的属性,所以不能在超类中执行它,并且无论如何都不合乎逻辑。如前所述,你可以这样做:

abstract class A {
      public abstract void doStuff();       
    }

class B extends A    {
  static List<String>myArray = new LinkedList<String>();

  public abstract void doStuff() {
      // do B stuff
  }

}

class C extends A  {
  static List<String>myArray = new LinkedList<String>();
  public abstract void doStuff() {
      // do C stuff
  }

}