[IT]/java
java.Polymorphism(다형성)
givemebro
2021. 3. 2. 14:47
반응형

Polymorphism(다형성): Polymorphism은 객체 지향의 주요 개념
"하나의 메세지 방식으로 다향한 객체들이 각자의 방식으로 동작하는 성질"
"One Interface, Multiple Implements"
> 다형성 적용을 위해서는 계층 구조 형성이 필요
> 하나의 사용법(인터페이스)을 익히면 다양한 객체들을 동작시킬 수 있음
> 하나의 자동차 운전법만 알면 다양한 자동차(suv, 세단, 전기차)를 운전할 수 있음
> 플레이어 사용법을 익히면 다양한 플레이어(유튜브, 곰플레이어, cd player)를 사용할 수 있음
> 생산성 및 유지보수성 향상
Animal a = new Person();
// 부모 타입의 변수로 다양한 자식 객체를 참조할 수 있음
> 부모 타입의 변수로 다양한 자식 객체를 참조할 수 있음
Animal a1 = new Dog();
// 자식 객체를 부모타입의 변수에 참조 가능
> 자식 객체를 부모타입의 변수에 참조 가능
//reference variable
rv.pass(new Persion()) ---> public void pass(Animal a){}
rv.pass(new Dog()) ---> public void pass(Animal a){}
// 자식 객체를 전달하면 ---> 부모타입의 매개변수로 처리할 수 있음
> 자식 객체를 전달하면 ---> 부모타입의 매개변수로 처리할 수 있음
예제1
package step9;
class Animal {
public void eat() {
System.out.println("먹다");
}
}
class Person extends Animal {
// 메서드 오버라이딩
public void eat() {
System.out.println("사람이 수저로 먹다");
}
}
class Dog extends Animal {
}
public class TestPolymorphism1 {
public static void main(String[] args) {
// 부모 타입의 변수에 자식 객체 참조 가능
Animal a1 = new Person();
Animal a2 = new Dog();
// 오버라이딩된 메서드가 호출
a1.eat();
// 오버라이딩한 메서드가 없으므로 부모 메서드 호출
a2.eat();
}
}
/*
사람이 수저로 먹다
먹다
*/
예제2
package step10;
class Product {
}
class Computer extends Product {
private String name;
@Override
public String toString() {
return "Computer";
}
}
class Food extends Product {
private String name;
@Override
public String toString() {
return "Food";
}
}
class MarketService {
// Product 부모 타입의 매개변수로 다양한 자식 객체들을 처리할 수 있음
public void pay(Product p) { // 유지보수성 향상
System.out.println("결제 "+p);
}
}
public class TestPolymorphism2 {
public static void main(String[] args) {
MarketService service = new MarketService();
service.pay(new Computer());
service.pay(new Food());
}
}
반응형