- ベストアンサー
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メソッドの呼び出しをしたいのですができません、どなたか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
判別は、 if(an[i] instanceof Vehicle){ でいいので、あとは、キャストしてやればいいです。 an[i].drive();//ここにエラーが出る を ((Vehicle)an[i]).drive(); に変更 わかりにくければ Vehicle v = (Vehicle)an[i]; v.drive(); としても可。
お礼
キャストはヒントとして出されていました…、そうかこういう風にも使えるんですね~、本当にありがとうございました!