0

你将如何在 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?

4

3 回答 3

5

你不能按照这些思路做事。您可以做的最接近的是在超类中拥有一个抽象(非静态)方法并用它做一些事情。

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

于 2012-10-19T18:07:20.057 回答
0

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

于 2012-10-19T18:07:30.383 回答
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
  }

}
于 2012-10-19T20:29:30.427 回答