Java中静态抽象方法的替代方案

时间:2016-03-16 06:10:40

标签: java inheritance design-patterns static

我的情况是我需要所有的子类来实现父类的通用抽象方法...... 静态。但显然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中不允许这样做。

相反,我正在寻求有关上述方法的替代设计模式的帮助。谢谢!

4 个答案:

答案 0 :(得分:2)

如果创建静态方法,则可以使用类本身访问该方法,即不创建该类的实例。因此,静态方法不可能是抽象的。

答案 1 :(得分:1)

如果一个方法是静态覆盖它没有任何意义,因为继承不适用......这就是原因......

静态代码是与类相关的代码,而不是与对象或实例相关的代码。

您需要修改代码......

答案 2 :(得分:1)

您可以将ChildFactory实现为单例。

请参阅 https://en.wikipedia.org/wiki/Singleton_pattern

答案 3 :(得分:1)

我认为你的问题在于对工厂模式的理解。您问题的典型答案是“使用工厂模式”。因为在工厂中,您可以在具体实例上调用init。如果您没有使用依赖注入并通过控制反转来使用松耦合,则工厂通常实现为单例。这是从任何地方获取它,应该只有一个工厂的实例。

简而言之,如果您想初始化工厂,因为您想要将工厂子类化(这对IMHO来说没有多大意义),您需要创建一个创建工厂的工厂。