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;
}
}
}
}
コメント