• ベストアンサー

Java初心者です

次のようなプログラムを作りました interface Vehicle{ void drive(); } abstract class Animal{ abstract void show(); } class Lion extends Animal{ public void show(){ System.out.println("ライオンです"); } } class Horse extends Animal implements Vehicle{ public void show(){ System.out.println("馬です"); } public void drive(){ System.out.println("乗り物として使えます"); } } class Elephant extends Animal implements Vehicle{ public void show(){ System.out.println("象です"); } public void drive(){ System.out.println("乗り物として使えます"); } } class Bear extends Animal{ public void show(){ System.out.println("熊です"); } } class twentyeight{ public static void main(String args[]){ Animal an[]; an = new Animal[4]; an[0] = new Lion(); an[1] = new Horse(); an[2] = new Elephant(); an[3] = new Bear(); for(int i = 0;i < an.length;i++){ if(an[i] instanceof Vehicle){ an[i].drive();//ここにエラーが出る } else{ an[i].show(); } } } } インターフェイスを実装しているオブジェクトを判別し、そのdriveメソッドの呼び出しをしたいのですができません、どなたか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

判別は、 if(an[i] instanceof Vehicle){ でいいので、あとは、キャストしてやればいいです。 an[i].drive();//ここにエラーが出る を ((Vehicle)an[i]).drive(); に変更 わかりにくければ Vehicle v = (Vehicle)an[i]; v.drive(); としても可。

bike-sssr
質問者

お礼

キャストはヒントとして出されていました…、そうかこういう風にも使えるんですね~、本当にありがとうございました!

その他の回答 (2)

  • Realize
  • ベストアンサー率50% (1/2)
回答No.3

重複回答すみません… 先越されたみたいですね(/_;)

bike-sssr
質問者

お礼

いいえ!本当にありがとうございます、ポイントは早い者勝ちってことでどか勘弁してくださいね、すいません~。

  • Realize
  • ベストアンサー率50% (1/2)
回答No.2

an[i].drive();//ここにエラーが出る ↓ ((Vehicle)an[i]).drive();//これだっ!

関連するQ&A

専門家に質問してみよう