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 = "キジ"; } }