JAVA

JAVA 동적바인딩, toString() 예제 - 동물의 숲

yn98 2024. 7. 4. 16:45

 

<요구사항>

class 주민
   String 타입; // 무조건 있음
   String 이름; // 주민을 생성할때, 이름을 반드시 설정하면서 만들어야함
   hello()
      행복함 / 무난함 / 슬픔 / 화남
         중에서 1개 랜덤으로 출력함
            ,야옹 / ,개굴
   action(String 도구)
      잠자리채 >> 곤충채집
      낚시대 >> 생선낚시
      삽 >> 땅파기

class 고양이 extends 주민

class 개구리 extends 주민

main()
   주민[] datas = new 주민[3];
   datas[i] = new 고양이("히죽");
         new 고양이("1호");
         new 개구리("레이니");
         new 개구리("아이다");

클래스(타입,자료형) : 주민, 고양이, 개구리
객체(변수,값,실제 메서드 수행 주체) : 히죽,1호,레이니,아이다,...

 

 

<풀이>

 

package class06;

import java.util.Random;


class Tool {
	String name; 
	Tool(String name){ //이름을 반드시 설정해서 만들어야 하므로
		this.name=name;
	}
	void action() { 
		System.out.println("액션"); //예시
	}
}
class Fishing extends Tool {
	Fishing(){
		super("낚시대"); // 도구 이름
	}
	@Override
	void action() {
		System.out.println("생선낚시"); //그 도구가 하는 행동
	}
}
class Dragonfly extends Tool {
	Dragonfly(){
		super("잠자리채");
	}
	@Override
	void action() {
		System.out.println("곤충채집");
	}
}
class Digging extends Tool {
	Digging(){
		super("삽");
	}
	@Override
	void action() {
		System.out.println("땅파기");
	}
}
class Animal {
	String type; // 무조건 존재.(고양이, 개구리 ,..)
	String name; // 주민을 생성할때, 이름을 반드시 설정하면서 만들어야함
	static String[] datas= {"행복해요","무난합니다","슬퍼요","화났어요"};// 클래스 변수
	static Random rand=new Random();
	Animal(String type,String name) {
		this.type=type;
		this.name=name;
	}
	void hello() {
		// [1] 0 -> 행복, 1 -> 무난, ... : if문
		// [2] 감정[] = {행복함 / 무난함 / 슬픔 / 화남} : 배열
		int randNum=Animal.rand.nextInt(Animal.datas.length);
		System.out.print(Animal.datas[randNum]+",");
	}
	void action(Tool tool) {
		tool.action(); // 동적바인딩 -> 다형성 실현
	}
}
class Cat extends Animal {
	Cat(String name){
		super("고양이",name);
	}
	@Override
	void hello() {
		super.hello();
		System.out.println("야옹");
	}
}
class Frog extends Animal {
	Frog(String name){
		super("개구리",name);
	}
	@Override
	void hello() {
		super.hello();
		System.out.println("개굴");
	}
	@Override
	public String toString() {
		return "( " +this.name + ", "+this.type + " )";
	}
}

/*
hello()
         ,야옹 / ,개굴
action(String 도구)
   잠자리채 >> 곤충채집
   낚시대 >> 생선낚시
   삽 >> 땅파기
 */

public class Test01 {
	public static void main(String[] args) {
		Animal[] datas = {
				new Cat("히죽"),
				new Cat("1호"),
				new Frog("레이니"),
				new Frog("아이다")
		};
		System.out.println(datas[2]);
		datas[2].hello();
		
		 // Tool 객체 생성
        Tool tool = new Dragonfly(); // 잠자리채를 이용하여
        // 동물이 도구를 이용하여 동작을 수행
		 datas[2].action(tool);
		 
		 datas[3].action(new Digging()); // 위 datas[2]와 같은 맥락인데 1줄로 한다면?

    }

}