package Kabu; public class TheGiantTurnip { public static void main(String[] args){ System.out.println("「おおきなかぶ」~ロシア民話~"); Human jisan = new Human("おじいさん",40); Turnip kabu = jisan.plant(); jisan.grab(kabu); jisan.pull(); Human basan = new Human("おばあさん",20); jisan.call(basan); basan.pull(); Human mago = new Human("まご",10); basan.call(mago); mago.pull(); Dog inu = new Dog(15); mago.call(inu); inu.pull(); Cat neko = new Cat(10); inu.call(neko); neko.pull(); Mouse nezumi = new Mouse(5); neko.call(nezumi); nezumi.pull(); } } abstract class Organism{ String name = ""; int power; abstract void pull(int receivedPower); String getName(){ return name; } } class Animal extends Organism{ Organism grabbingObject; Turnip plant(){ System.out.println(name + "はカブを植えました."); return new Turnip(); } void call(Animal dareka){ dareka.grabbingObject = this; System.out.println(name + "は" + dareka.getName() + "を呼んできました."); } void pull() { if(grabbingObject == null){ System.out.println("何も掴んでいません"); return; } if(grabbingObject instanceof Vegetable){ System.out.println(name + "は" + grabbingObject.getName() + "を引っ張りました."); }else{ System.out.println(name + "は" + grabbingObject.getName() + "を引っ張り,"); } grabbingObject.pull(power); } @Override void pull(int receivedPower) { if(grabbingObject == null){ System.out.println("何も掴んでいません"); return; } if(grabbingObject instanceof Vegetable){ System.out.println(name + "は" + grabbingObject.getName() + "を引っ張りました."); }else{ System.out.println(name + "は" + grabbingObject.getName() + "を引っ張り,"); } grabbingObject.pull(power + receivedPower); } void grab(Organism _grabbingObject){ grabbingObject = _grabbingObject; } } class Human extends Animal{ Human(String _name, int _power){ name = _name; power = _power; } } class Dog extends Animal{ Dog(int _power){ name = "犬"; power = _power; } } class Cat extends Animal{ Cat(int _power){ name = "猫"; power = _power; } } class Mouse extends Animal{ Mouse(int _power){ name = "ねずみ"; power = _power; } } class Vegetable extends Organism{ boolean harvest = false; @Override void pull(int receivedPower) { System.out.println("うんとこしょ,どっこいしょ"); if (power <= receivedPower){ System.out.println(name + "は抜けました.(条件:"+power+"以上,現在:"+receivedPower+")"); harvest = true; }else{ System.out.println("しかし" + name + "は抜けません.(条件:"+power+"以上,現在:"+receivedPower+")"); System.out.println(); } } } class Turnip extends Vegetable{ Turnip(){ name = "カブ"; power = 100; System.out.println("大きな"+ name + "ができました."); } }