Q
抽象クラスAnimal,具象クラスDog,Cat,Pigを以下のように作成しアプリケーションを作成せよ。
見つける動物の種類はランダムとし、匹数に制限はない。
(カプセル化を行い適切なアクセス修飾子を付与すること)
[クラス]
◯抽象クラス
Animal
フィールド
name
一般メソッド
introduce()
抽象メソッド
makeNoise()
◯具象クラス
Dog extends Animal
makeNoise(){
System.out.println(this.name+”はワンと吠えた”);
}
Cat extends Animal
makeNoise(){
System.out.println(this.name+”はニャーとないた”);
}
sleep(){
System.out.println(this.name+”はすやすや眠った。”);
Pig extends Animal
makeNoise(){
System.out.println(this.name+”はブーとないた”);
}
****AnimalLand****
行動を選択してください。1…見つける 2…様子を見る 3…終わり>2
まだ動物はいません。
行動を選択してください。1…見つける 2…様子を見る 3…終わり>1
犬を見つけた!名前をつけてください>ジョン
こんにちはジョンです。よろしく!
行動を選択してください。1…見つける 2…様子を見る 3…終わり>1
豚を見つけた!名前をつけてください>トン
こんにちはトンです。よろしく!
行動を選択してください。1…見つける 2…様子を見る 3…終わり>2
ジョンはワンと吠えた
トンはブーとないた
行動を選択してください。1…見つける 2…様子を見る 3…終わり>1
猫を見つけた!名前をつけてください>ミケ
こんにちはミケです。よろしく!
行動を選択してください。1…見つける 2…様子を見る 3…終わり>2
ジョンはワンと吠えた
トンはブーとないた
ミケはニャーとないた
ミケはすやすや眠った。
行動を選択してください。1…見つける 2…様子を見る 3…終わり>3
アプリケーションを終了します。
[解答例]
クラス
public abstract class Animal { private String name; public Animal(String name) { super(); this.name = name; } public void introduce() { System.out.printf("こんにちは%sです。よろしく!%n",this.name); } public abstract void makeNoise() ; public String getName() { return name; } } class Dog extends Animal{ public Dog(String name) { super(name); } @Override public void makeNoise() { System.out.printf("%sはワンと吠えた!%n",this.getName()); } } class Cat extends Animal{ public Cat(String name) { super(name); } @Override public void makeNoise() { System.out.printf("%sはニャーとないた!%n",this.getName()); } public void sleep() { System.out.printf("%sはすやすや眠った。%n",this.getName()); } } class Pig extends Animal{ public Pig(String name) { super(name); } @Override public void makeNoise() { System.out.printf("%sはブーとないた!%n",this.getName()); } }
アプリケーションクラス
import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); Random rand=new Random(); List<Animal> list=new ArrayList<>(); String[] types= {"犬","猫","豚"}; System.out.println("****AnimalLand****"); while(true) { System.out.print("行動を選択してください。1…見つける 2…様子を見る 3…終わり>"); int select=scan.nextInt();scan.nextLine(); switch(select) { case 1: int index=rand.nextInt(types.length); System.out.printf("%sを見つけた!名前をつけてください>",types[index]); String name=scan.nextLine(); Animal animal; if(index==0) { animal=new Dog(name); }else if(index==1) { animal=new Cat(name); }else { animal=new Pig(name); } animal.introduce(); list.add(animal); break; case 2: if(list.isEmpty()) { System.out.println("まだ動物はいません。"); break; } for(Animal a:list) { a.makeNoise(); if(a instanceof Cat) { ((Cat) a).sleep(); } } break; case 3: scan.close(); System.out.println("アプリケーションを終了します。"); return; } } } }
コメント