如何在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?
答案 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
}
}