abstract class A
{
  protected static Queue<String> q = new ArrayList<String>();

  abstract void myAbstractMethod();

  public doConcreteThings()
  {
     //busy code utilizing a 'q'
     q.add("something");
     myAbstractMethod();
     //busy code
  }

}

class B extends A
{

  public void myAbstractMethdo()
  {
     //creates concrete implementation using 'q'
  }
}

class C extends A
{

  public void myAbstractMethdo()
  {
     //creates concrete implementation using 'q'
  }
}



每个扩展类都会获得自己的静态队列吗?
如果没有,我如何确保在父级中定义了静态变量的通用功能,但是每个类都有自己的静态变量(因此有一个静态队列)

最佳答案

不,所有类将共享一个队列。一种方法是在每个子类中都有一个单独的静态队列,并添加另一个受保护的getQueue()方法来返回此队列。这样,每个子类都可以拥有自己的队列。

请注意,getQueue()将是非静态方法,但返回静态变量引用。这样,您就可以在子类中实现它,而其行为则像静态方法一样“有效”(不需要访问this)。

abstract class A
{
  protected abstract Queue<String> getQueue();
  public abstract void myAbstractMethod();

  public doConcreteThings()
  {
     //busy code utilizing a 'q'
     getQueue().add("something");
     myAbstractMethod();
     //busy code
  }
}

class B extends A
{
  private static Queue<String> q = new ArrayList<String>();
  protected Queue<String> getQueue() { return q; }

  public void myAbstractMethod()
  {
     //creates concrete implementation using 'q'
  }
}

class C extends A
{
  private static Queue<String> q = new ArrayList<String>();
  protected Queue<String> getQueue() { return q; }

  public void myAbstractMethod()
  {
     //creates concrete implementation using 'q'
  }
}

关于java - OOP:如果在Parent中定义了,每个子类都会得到自己的静态变量吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13012707/

10-11 22:39
查看更多