2017-11-25 4 views
0

私は別の(通信)を拡張する2つのクラス(PhoneCall、SMS)を持っています。別のクラス(レジストリ)では、電話と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; 
} 

したがって、プログラムは通信クラスでメソッドを検出しませんが、そのサブクラスの1つにあります。 私は実際にどのように進めるのか分かりません。もし誰かが私を助けることができたら、本当にいいよ。

答えて

2

変更に内部のチェック:

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

あなたの修正されたソースは次のようにする必要があります:

インスタンスだけ PhoneCallクラスであると Communicationオブジェクトは、その後であることを確認され、
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にキャストされ、PhoneCallクラスに特有の方法を得る。また、Stringクラスを比較するには、.equals(Object)を使用する必要があります。

関連する問題