例
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/