[英]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具有不同的方法,我希望它們在newSon1或newSon2變量中使用。
有兩種方法可以解決該問題。 直接的方法依賴於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.