public class Ikimono {
String name = "";
void printName(){
System.out.println(name);
}
void morau(Mono mono){
System.out.println(name + "が "+mono.toString()+" をもらった");
}
}
class Momotaro extends Ikimono {
Fukuro kibiBukuro;
Momotaro(){ name = "桃太郎"; }
void morau(Mono mono){
super.morau(mono);
if (mono instanceof Fukuro) kibiBukuro = (Fukuro)mono;
}
void watasuKibi(Ikimono dareka){
Kibidango oneKibi = (Kibidango)kibiBukuro.pop();
dareka.morau(oneKibi);
System.out.println(" 残り "+kibiBukuro.size()+" 個");
}
}
class Ojiisan extends Ikimono {
Ojiisan(){ name = "お爺さん"; }
}
class Obaasan extends Ikimono {
Fukuro fukuro;
Obaasan(){
name = "お婆さん";
fukuro = new Fukuro();
}
void tsukuruKibi(){
fukuro.add(new Kibidango());
fukuro.add(new Kibidango());
fukuro.add(new Kibidango());
}
void watasuFukuro(Ikimono dareka){
dareka.morau(fukuro);
fukuro = null;
}
}
class Inu extends Ikimono {
Inu(){ name = "犬"; }
}
class Saru extends Ikimono {
Saru(){ name = "猿"; }
}
class Kiji extends Ikimono {
Kiji(){ name = "キジ"; }
}