Java 给定一个包含来自多个类的对象的堆栈,如何管理弹出的对象?

Java 给定一个包含来自多个类的对象的堆栈,如何管理弹出的对象?,java,inheritance,stack,Java,Inheritance,Stack,我有一个父亲班,还有两个父亲班,分别是Son1和Son2。我还有一个堆栈(我们称之为myStack),其中有一些Son1和Son2对象 用户决定将哪些对象(Son1或Son2)放入堆栈中。当我使用 newFather=myStack.pop() Son1或Son2将被放置在newFather中。我怎样才能检查它是哪一个?这很重要,因为Son1和Son2有不同的方法,我希望它们在newSon1或newSon2变量中。您可以使用instanceof if(myFather instanceof So

我有一个父亲班,还有两个父亲班,分别是Son1和Son2。我还有一个堆栈(我们称之为myStack),其中有一些Son1和Son2对象

用户决定将哪些对象(Son1或Son2)放入堆栈中。当我使用

newFather=myStack.pop()


Son1或Son2将被放置在newFather中。我怎样才能检查它是哪一个?这很重要,因为Son1和Son2有不同的方法,我希望它们在newSon1或newSon2变量中。

您可以使用
instanceof

if(myFather instanceof Son1){
    //do something with son1
}

if(myFather instanceof Son2){
    //do something with son2
}

解决这个问题有两种方法。直接方式依赖于的实例:

Father newFather = myStack.pop()
if(newFather instanceof Son1){
    Son1 mySon1 = (Son1) newFather;
    // use mySon1
}

if(newFather instanceof Son2){
    Son2 mySon2 = (Son2) newFather;
    // use mySon2
}
问题在于,它以某种方式击败了多元主义。这确实是可能的,并且可以有适当的用例,但如果可能,您应该尝试使用overiden函数:

class Father {
    ...
    void doProcess() {
    }
}

class Son1 extends Father{
    ...
    @Override
    public void doProcess() {
        // do Son1 processing
        ...
    }
}

class Son2 extends Father{
    ...
    @Override
    public void doProcess() {
        // do Son2 processing
        ...
    }
}
然后在代码中只需执行以下操作:

Father newFather = myStack.pop()
newFather.doProcess

非常感谢。这将是我收藏的一个很好的补充@如果答案正确,请标记为正确,以便其他人可以轻松找到。感谢向他人提供信息
Son1 mySon1=(Son1)newFather这是向下广播。