Java 如何调用基类';当它';什么被推翻了?

Java 如何调用基类';当它';什么被推翻了?,java,inheritance,polymorphism,overriding,dynamic-binding,Java,Inheritance,Polymorphism,Overriding,Dynamic Binding,在上面的模板中,我需要一种方法来确保Parent.getObjectValue()中的getObject()调用Parent.getObject()而不是Child.getObject(),这样子类就可以有oBase和oChild的getter 我尝试在Parent.getObjectValue()中使用((Parent)this).getObject().getValue(),但它仍然会变形为子定义。有没有办法在java中为特定调用强制进行静态绑定 我试图避免从Parent.getObject

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

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


我试图避免从Parent.getObjectValue()中的Parent.getObject()复制[some logic],但如果真的没有办法,我想我必须这样做。

由于多态性,不能从子类外部强制调用
Parent
的方法。实际上,对于
子对象
对象,父方法不再存在,因为它已被重写

在这里,您似乎不需要多态性的任何方面(尽管没有更多信息很难判断)。如果您确实不需要它(不同的用例),那么更改您的方法的名称以使其不会发生


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

您可以直接引用私有字段“oBase”,而不是使用“getObject()”方法。

您可以将
getObject()
方法设置为私有,或者更改方法名称,使多态性不会启动。总的来说,你必须重新考虑你的设计


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

我想您应该将其设置为私有。如果您创建的对象类似于Parent Parent=new Parent();然后将调用父方法,如果您创建像parent parent=new Child()这样的对象;然后调用子方法…
super
调用基类变量和方法。您可以在子类方法中使用super.yourMethod()。阅读本文,它还将帮助您理解方法重写的概念。但是OP说他希望执行的getObject()方法中有一些逻辑(请参阅;)那么你的答案是正确的。他需要重新考虑一下他的设计,[some logic]部分实际上是检索getObject()返回的内容(基于一个参数,只是想让我的问题尽可能与主题相关;),所以CQS很满意。我使用了私有方法,它由父类中的getObject()和getObjectValue()调用。谢谢:)
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();
    }
}