簡體   English   中英

給定一個堆棧,其中包含來自多個類的對象,您如何管理彈出的對象?

[英]Given a stack with objects from multiple classes in it, how can you manage the objects the pop out?

我有一個父親類,和兩個擴展父親的類Son1和Son2 我還有一個堆棧(我們稱其為myStack),並且其中有一些Son1和Son2對象。

用戶決定將哪些對象(Son1或Son2)放入堆棧中。 當我使用

Father newFather = myStack.pop()

Son1或Son2將放置在newFather中 如何檢查是哪一個? 它的重要原因是Son1和Son2具有不同的方法,我希望它們在newSon1newSon2變量中使用。

有兩種方法可以解決該問題。 直接的方法依賴於instanceof

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

if(newFather instanceof Son2){
    Son2 mySon2 = (Son2) newFather;
    // use mySon2
}

問題是,以某種方式擊敗了多語言。 確實可能並且可以有適當的用例,但是在可能的情況下,您應該嘗試使用覆蓋函數:

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

您可以使用instanceof

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM