当它被覆盖时,如何从另一种方法调用基类自己的方法?

时间:2014-04-22 09:06:41

标签: java inheritance polymorphism override dynamic-binding

public class Parent{

    private Object oBase;

    public Object getObject(){

        // [some logic] 
        return oBase;
    }

    public String getObjectValue(){

        return getObject().getValue();
    }



public class Child extends Parent {

    private Object oChild;

    public Object getObject(){

        return oChild;
    }


    public Object getObjectValue(){

        return getObject().getValue();
    }

    public String getParentObjectValue(){

        return super.getObjectValue();
    }
}

在上面的模板中,我需要一种方法来确保Parent.getObjectValue()中的getObject()调用Parent.getObject()而不是Child.getObject(),以便子类可以有getBase到oBase和oChild。

我尝试在Parent.getObjectValue()中使用((Parent)this。)。getObject()。getValue(),但它仍然是子定义的多态。有没有办法在java中为特定的调用强制静态绑定?

我试图避免在Parent.getObjectValue()中复制来自Parent.getObject()的[某些逻辑],但我想如果真的没办法我就不得不这样做它

3 个答案:

答案 0 :(得分:0)

由于多态性,您无法从子类外部强制调用Parent方法。实际上,对于Child对象,父方法不再存在,因为它已被覆盖。

这里似乎不需要任何多态性方面(虽然没有更多信息很难分辨)。如果你确实不需要它(不同的用例),那么改变你的方法'名称,以便它不会发生。

注意:如果您在儿童课程中,那么您可以使用super,但我认为这不是您的情况。

答案 1 :(得分:0)

你可以参考私人领域' oBase'直接而不是使用' getObject()'方法

答案 2 :(得分:0)

您可以将getObject()方法设为私有,也可以更改方法名称,以便不会启用多态。总的来说,您必须重新考虑您的设计。

其他选项是将[某些逻辑]提取到第三种方法,并从getObject()getObjectValue()调用此方法。使用此设计时请记住命令查询分离原则。