공부/Java
다형성 Polymorphism
진호진호
2024. 2. 22. 17:46
Bird | Worm | Cat |
cry() | chirp() | croak() |
↓ 타입이 다른 객체들이 동일한 개념의 행위를 수행할 때, 같은 이름을 부여하고 다르게 행동하게 하는 것이 좋다.
Bird | Worm | Cat |
cry() | cry() | cry() |
다형성
타입이 다른 객체가 같은 이름, 다른 행동의 메소드를 사용할 수 있게 하는 동적 바인딩 과정
1. 슈퍼클래스에서 상위 개념 정의
public class Animal {
void cry() {}
}
//abstract class, interface 모두 가능
2. 각 서브클래스에서 재정의/구현
public class Cat extends Animal{
@Override
void cry() {
System.out.println("야옹");
}
}
public class Sparrow extends Animal{
@Override
void cry() {
System.out.println("짹짹");
}
}
3. 슈퍼클래스 타입의 참조변수 선언
public class Polymorphism {
public static void main(String[] args) {
Animal cat = new Cat();
Animal sparrow = new Sparrow();
cat.cry(); //야옹
sparrow.cry(); //짹짹
}
}
다형성의 장점
클래스 타입에 관계없이 하나의 추상적인 함수 이름을 사용.
새로운 타입의 서브클래스를 추가해도 프로그램 변경이 거의 없다.
public class Polymorphism2 {
public static void main(String[] args) {
Animal[] animals = {
new Cat(),
new Sparrow(),
new Dodo(), // 프로그램에 새로운 서브클래스를
new Caw() // 추가하여도
};
for (Animal x : animals) { // 변경되지
x.cry(); // 않음.
}
}
}