我的情况是我需要所有的子类来实现父类的通用抽象方法...... 静态。但显然Java不允许抽象的静态方法......
那么,Java中这种实现的替代设计是什么?以下是描述我所处情况的代码:
家长班
public abstract class ParentFactory {
/**
* This is a factory class that provides static init method
**/
public abstract static void init();
}
儿童课
public class ChildFactory extends ParentFactory {
@Override
public static void init() {
// each child factory has own implementation of init
}
}
修改
仅供参考,我不是在问为什么这在Java中无效,我意识到静态方法的概念,我知道为什么在Java中不允许这样做。
相反,我正在寻求有关上述方法的替代设计模式的帮助。谢谢!
答案 0 :(得分:2)
如果创建静态方法,则可以使用类本身访问该方法,即不创建该类的实例。因此,静态方法不可能是抽象的。
答案 1 :(得分:1)
如果一个方法是静态覆盖它没有任何意义,因为继承不适用......这就是原因......
静态代码是与类相关的代码,而不是与对象或实例相关的代码。
您需要修改代码......
答案 2 :(得分:1)
您可以将ChildFactory实现为单例。
答案 3 :(得分:1)
我认为你的问题在于对工厂模式的理解。您问题的典型答案是“使用工厂模式”。因为在工厂中,您可以在具体实例上调用init。如果您没有使用依赖注入并通过控制反转来使用松耦合,则工厂通常实现为单例。这是从任何地方获取它,应该只有一个工厂的实例。
简而言之,如果您想初始化工厂,因为您想要将工厂子类化(这对IMHO来说没有多大意义),您需要创建一个创建工厂的工厂。