반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

java.Polymorphism(다형성) 본문

[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());
	}
}
반응형

'[IT] > java' 카테고리의 다른 글

java.final  (0) 2021.03.04
java.static(정적)  (0) 2021.03.04
java.Polymorphism.ObjectCasting(캐스팅)  (0) 2021.03.02
java.Polymorphism.instanceof(객체 타입 비교)  (0) 2021.03.02
java.annotation(어노테이션)  (0) 2021.03.02
java.overriding.toString  (0) 2021.03.02
java.Object(오브젝트 클래스)  (0) 2021.03.02
java.Overriding(메서드 오버라이딩)  (0) 2021.03.02
Comments