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 |