我有几个队列都扩展了Queue
类。我想做一个Queue manger基类来处理添加到队列(和其他操作)。
如果你看一下下面的代码,我创建了一个名为QueueManger
的基类,它有一个名为add()
的静态方法,它将获得'Queue'并为其添加一个变量。我想让getQueue()
(在add()中调用)抽象,因为我想强制其他类提供自己的'Queue'实现。问题是我无法声明抽象静态方法。解决这个问题的正确方法是什么?
public class RegistrationQueueManger {
@Override
Queue getQueue() {
return new RegistrationQueue(); // RegistrationQueue is a class that
// extends Queue.java
}
}
public abstract class QueueManger {
abstract static Queue getQueue(); // Error: cant do! (in java)
public static Add(String myvar) {
getQueue().add(myvar);
}
}
注意:我看到了一些关于这个主题的问题,但它并没有给出如何解决它并创建另一个设计来处理它的好答案。
答案 0 :(得分:3)
只能覆盖实例方法。因此静态方法上的抽象是没有意义的。 getQueue
方法不应该是静态的,add
方法也不应该是静态的。
答案 1 :(得分:1)
这是因为必须重写(实现)抽象方法,并且不继承静态方法。任何静态的东西都属于声明它的类本身。所以,如果你使getQueue()
静态,那么它将是一个属于类QueueManger
类本身的类方法。因此,将其设为实例方法,以便扩展QueueManger
的每个类都有自己的getQueue()
。
答案 2 :(得分:0)