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