먹었으면 뇌를 쓰자
다형성(polymorphism)을 이해하는 가장 간단한 설명 본문
interface Predator {
String getFood();
default void printFood() {
System.out.printf("my food is %s\n", getFood());
}
int LEG_COUNT = 4;
static int speed() {
return LEG_COUNT * 30;
}
}
interface Barkable {
void bark();
}
interface BarkablePredator extends Predator, Barkable {
}
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Tiger extends Animal implements Predator, Barkable {
public String getFood() {
return "apple";
}
public void bark() {
System.out.println("어흥");
}
}
class Lion extends Animal implements BarkablePredator {
public String getFood() {
return "banana";
}
public void bark() {
System.out.println("으르렁");
}
}
class ZooKeeper {
void feed(Predator predator) {
System.out.println("feed " + predator.getFood());
}
}
class Bouncer {
void barkAnimal(Barkable animal) {
animal.bark();
}
}
public class Sample {
public static void main(String[] args) {
Tiger tiger = new Tiger();
Lion lion = new Lion();
Bouncer bouncer = new Bouncer();
bouncer.barkAnimal(tiger);
bouncer.barkAnimal(lion);
}
}
//코드 출처: 점프 투 자바(https://wikidocs.net/269)
위의 코드에서 메인에 생성된 tiger, lion 객체는
기본적으로 Tiger, Lion 클래스의 객체이면서
Animal 클래스의 객체이기도 하다. (오버라이딩)
tiger 객체는 Predator, Barkable 인터페이스의 객체이기도 하다. (구현)
lion 객체는 두 인터페이스를 상속한 BarablePredator 인터페이스의 객체이기도 하다. (구현)
* 참고로 일반 클래스는 단일상속만 가능하지만, 인터페이스는 다중상속이 가능하다.
이처럼 하나의 객체가 여러 개의 자료형 타입을 가질 수 있는 것을 다형성이라 한다.
'JAVA > 개념' 카테고리의 다른 글
자바 이중 for문이 활용되는 2가지 경우 (0) | 2023.01.04 |
---|---|
자바 메소드의 구조, 리턴 값 응용하기 (0) | 2022.12.23 |
variable(변수), arguments(인수), parameter(매개변수) 구분하기 (0) | 2022.12.23 |
내가 만든 코드~ 나를 위해 구웠지... (Stream 코드) (0) | 2022.12.18 |
내가 만든 코드~ 나를 위해 구웠지... (Thread 코드) (0) | 2022.12.18 |
Comments