2017-11-25 42 views
0

我有2類(PhoneCall,SMS)擴展另一個(通信)。在不同的類(註冊表)中,我有一個ArrayList,它承載所有傳入的通信,包括電話和短信。我的任務要求我創建一個返回持續時間最長的電話(PhoneCall類的屬性)的方法。因此,當我通過通信運行ArrayList時,出現無法解析存在於PhoneCall類中的方法getCallDuration()的錯誤。如何在不同的類中使用子類特定的方法?

public PhoneCall getLongestPhoneCallBetween(String number1, String number2){ 
    double longestConvo=0; 
    for(Communication i : communicationsRecord){ 
     if(i.getCommunicationInitiator()==number1 && i.getCommunicationReceiver()==number2){ 
      if(i.getCallDuration()>longestConvo){ 
      } 


     } 
    } 
    return null; 
} 

所以程序沒有找到在通訊類中的方法,但它是在它的子類之一。 我真的不知道如何繼續。如果有人能幫助我,那真是太好了。

回答

2

更改內部檢查:

if (i instanceof PhoneCall) { 
    PhoneCall phoneCall = (PhoneCall) i; 
    if (phoneCall.getCallDuration() > longestConvo) { 
     // Do what you need to do.. 
    } 
} 
0

你修改的源應該是這樣的:

public PhoneCall getLongestPhoneCallBetween(String number1, String number2){ 
    double longestConvo=0; 
    PhoneCall temp=null; 
    for(Communication i : communicationsRecord){ 
     if(i instance of PhoneCall){ 
      PhoneCall p=(PhoneCall)i; 
      if(p.getCommunicationInitiator().equals(number1) && p.getCommunicationReceiver().equals(number2)){ 
       if(p.getCallDuration()>longestConvo){ 
        longestConvo=p.getCallDuration(); 
        temp=p; 
       } 
      } 
     } 
    } 
    return temp; 
} 

哪裏,檢查該實例只是PhoneCall類和Communication對象則鑄造到PhoneCall以獲得特定於PhoneCall類的方法。此外,您必須使用.equals(Object)來比較String類。

相關問題