java - 防止方法调用使用子类的方法

标签 java methods subclass

我有一些原则上类似于以下内容:

public class Generic {

    public Generic(){
        doStuff();
    }

    protected void doStuff(){
        System.out.println("Generic");
    }

}

public class Specific extends Generic {

    public Specific(){
        super();
    }

    protected void doStuff(){
        super.doStuff();
        System.out.println("Specific");
    }

}

我得到的错误表明,虽然该方法是从父类(super class)调用的,但它正在调用该方法的子类版本。在上面的例子中,实例化一个新的Specific 会打印出“Generic”和“Specific”,即使doStuff() 是由Generic 的构造函数调用的。

长话短说,我不想这样。如果在对象完全初始化之前调用它,子类的方法中有一些附加功能会导致问题。我怎样才能在父类(super class)的构造函数中强制它使用它自己的方法版本,而不是最专业的方法?

最佳答案

我不认为你可以在 Java 中拥有一个函数,即 A) 可以被覆盖,并且 B) 在调用时不会表现出多态性。我建议你做这样的事情来模拟你所询问的行为:

public class Generic {

    public Generic(){
        doGenericStuff();
    }

    private final void doGenericStuff() {
        System.out.println("Generic");
    }

    protected doStuff(){
        doGenericStuff();
    }

}

public class Specific extends Generic {

    public Specific(){
        super();
    }

    protected doStuff(){
        super.doStuff();
        System.out.println("Specific");
    }

}

关于java - 防止方法调用使用子类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5658240/

相关文章:

java - ConcurrentModificationException 但没有从 ArrayList 中删除任何内容

java - java排序方法的比较在哪里?

WCF - 添加到 [DataMember] List<BaseClass> 的子类导致异常

java - 如何使用DynamoDBMapper批量保存实体跳过空属性

java - 如何使用gradle导入依赖

python - 当使用组合而不是继承时,如何在 Python 中的兄弟对象之间进行通信

ios - 如何在 Swift 中为不同文件中的类定义函数?

java - 限制号Java中类的实例

java - 继承 - 从 Employee 类创建 Commission Employee 类并进行测试

java - 我应该如何在 Runnable 中设置我的 Future 结果?