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

2024. 7. 4. 16:45·JAVA

 

<요구사항>

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줄로 한다면?

    }

}

 

 

 

'JAVA' 카테고리의 다른 글

[JAVA] ArrayList, Map  (0) 2024.07.15
두번째 (소규모) 프로젝트 - 포켓몬 게임  (0) 2024.07.07
JAVA toString() 메서드에 대해서  (0) 2024.07.04
JAVA 오버라이딩 + 예제  (2) 2024.07.03
JAVA 상속, super() + 예제  (0) 2024.07.03
'JAVA' 카테고리의 다른 글
  • [JAVA] ArrayList, Map
  • 두번째 (소규모) 프로젝트 - 포켓몬 게임
  • JAVA toString() 메서드에 대해서
  • JAVA 오버라이딩 + 예제
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    정처기
    정처기 실기
    codeup 4891 : 행복
    정보처리기사
    수제비
    html
    recoverabledataaccessexception
    @repository
    어노테이션
    Di
    오블완
    MVC
    티스토리챌린지
    DispatcherServlet
    @Component
    정보처리기사 실기
    jsp
    오버로딩
    상속
    Spring
    java
    이벤트 스케줄러
    멘토씨리즈 자바
    aop
    스프링 프레임워크
    ViewResolver
    생성자
    2-layered 아키텍처
    @service
    객체지향
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
JAVA 동적바인딩, toString() 예제 - 동물의 숲
상단으로

티스토리툴바