본문 바로가기

2023.11.21-2024.05.31

231220 JAVA zoo 패키지(다형성)

package zoo;

 

public interface Predetor {

public abstract String getName();// 이름 불러오기 = 추상 메소드

// 몸통이 없어요. = 바디가 없다. = {}없다 = 구현할 수 없다.

 

public abstract void getAge();

// [public] 생략 가능의 뜻

// {body}

 

}

 

 

package zoo;

 

public class Zoo {

public static void main(String[] args) {

ZooTrainer trainer = new ZooTrainer();

Dog dog = new Dog();

dog.setName("해피");

dog.setAge(2);

 

Cat cat = new Cat();

cat.setName("냥냥");

cat.setAge(2);

 

Mouse mouse = new Mouse();

mouse.setName("미키");

mouse.setAge(1);

 

dog.getAge();

cat.getAge();

mouse.getAge();

 

trainer.feed(dog);

trainer.feed(cat);

trainer.feed(mouse);

 

dog.play();

cat.play();

mouse.play();

 

}

}

 

 

해피 나는 2살 엉아지!

냥냥 나는 2살! 엉아지

미키나는 1살! 막내지!

해피 맛있는거 먹자!

냥냥 맛있는거 먹자!

미키 맛있는거 먹자!

해피, 산책가자!

사냥가자! 냥냥펀치!

냥냥을 피해라!

 

 

package zoo;

 

public interface Play {

public void play();

 

}

 

 

package zoo;

 

public class ZooTrainer {

//밥주기 기능

public void feed(Predetor predator) { //다형성

System.out.println(predator.getName()+ "에게 밥을 줍니다.");

}

 

}

이 부분은 다형성의 개념을 활용한 메서드입니다. feed 메서드는 Predator 인터페이스를 구현한 객체를 매개변수로 받습니다. 다시 말해, 어떤 동물이든지 Predator 인터페이스를 구현하고 있다면 이 메서드에 전달할 수 있습니다.

인터페이스를 이용한 다형성은 코드의 유연성을 높여줍니다. 여기서 Predator는 어떤 동물이든지 먹이를 사냥하는 특성을 나타내는 인터페이스일 것입니다. 따라서 ZooTrainer 클래스의 feed 메서드는 먹이를 주는 동작을 어떤 종류의 포식자(Predator)에게든 적용할 수 있습니다.

 

package zoo;

 

public class Animal {

String name;

int age;

 

public void setName(String name) {// 이름 저장하기

this.name = name;

}

 

public void setAge(int age) {//동물의 나이를 설정하는 메소드

this.age = age;

}

 

}

package zoo;

 

public class Cat extends Animal implements Predetor, Play {

 // Animal클래스를 상속->name, age필드 사용

 // Predetor와 Play 인터페이스를 구현하여 해당 인터페이스의 메소드를 제공

 

@Override

public String getName() {

return name;

}// 구현부

 

@Override

public void play() {

System.out.println("사냥가자! 냥냥펀치!");

 

}

 

@Override

public void getAge() {

System.out.println(name + " 나는 2살! 엉아지");

 

}

 

}

 

 

 Cat 클래스는 동물의 이름과 나이를 설정하고, Predetor와 Play 인터페이스의 동작을 구현하며,

추가로 나이 정보를 출력하는 메서드를 가지고 있습니다.

package zoo;

 

public class Dog extends Animal implements Predetor, Play {

 

@Override

public String getName() {

return name;

}

 

@Override

public void getAge() {

System.out.println(name + " 나는 2살 엉아지!");

 

}

 

@Override

public void play() {

System.out.println("해피, 산책가자!");

 

}

 

}

 

package zoo;

 

public class Mouse extends Animal implements Predetor, Play {

 

@Override

public String getName() {

return name;

}

 

@Override

public void getAge() {

System.out.println(name + "나는 1살! 막내지!");

 

}

 

@Override

public void play() {

System.out.println("냥냥을 피해라!");

 

}

 

}

 

 

'2023.11.21-2024.05.31' 카테고리의 다른 글

231220 JAVA memory(메모리 구조)  (0) 2023.12.20
231220 JAVA avengers 패키지  (0) 2023.12.20
231220 JAVA Inter02(인터페이스)  (0) 2023.12.20
231220 JAVA Inter01(인터페이스)  (0) 2023.12.20
231220 JAVA Study  (1) 2023.12.20