본문 바로가기
JAVA SE/이론 및 개념

[20.07.21/Day_10] Java SE / Polymorphism Array 다형성 배열

by 파프리카_ 2020. 7. 21.
728x90
반응형

[ Review ]

 

Polymorphism 다형성이란?

 : 하나의 메시지 방식으로, 다양한 객체들이 각자의 방식으로 동작하는 성질

 

"One Interface, Multiple Implement"

⇒ 하나의 메세지 방식으로 여러 개의 기능을 구현할 수 있다.

Interface : 소통방식 (메시지 방식/메서드 명)

Implement : 구현부 (기능)

 

 

실생활 적용 사례 )

사용자에 따라 차를 고를 때, 같은 차를 고르더라도, 각자의 용도에 맞게 메서드(기능)을 최적화하여 사용할 수 있다.

 

 

코드 예제 )

> 위자식 객체를 생성한 후 반환되는 주소값을 부모타입 변수에 저장하는 코드

 즉, 부모타입의 변수에 자식 객체를 참조할 수 있다.

Animal a = new Person();

 

> 특정 메서드 호출 시, 인자값(객체 주소값)을 자식객체 주소값으로 전달하고,

처리 메서드에서는 매개변수를 부모 타입의 변수로 할당받아 처리할 수 있다.

rv.pass(new Person());
// rv : refenece variable 참조변수

public void pass(Animal a) {}

 


 

[ Polymorphism Array 배열  다형성]

 

사용 예제 1

class Car{}
class Animal{}
class Person extends Animal{}

public class TestPolymorphismArray1 {
	public static void main(String[] args) {
		Animal []a = new Animal[3];
		//원칙적으로 배열은 선언한 데이터타입의 정보만 담는다.
		a[0] = new Animal();
		// 부모타입의 배열에 자식객체를 담을 수 있다(다형성이 지원되므로)
		a[1] = new Person();
		//a[2] = new Car(); //error: Car는 Animal과 상속관계가 아니므로 담을 수 없다.
	}
}

 

사용 예제 2

import step2.review.*;

public class TestPolymorphismArray3 {
	public static void main(String[] args) {
		Animal arr[] = { new Tiger(), new Monkey(), new Person() };
		ZooService2 service = new ZooService2();
		service.executeAll(arr);
		/*
		 * 호랑이가 사냥하며 놀다 
		 * 원숭이가 나무타며 놀다
		 * 티켓팅하다 
		 * 사람이 데이트하며 놀다
		 */
	}
}

 

import step2.review.*;

public class ZooService2 {
	public void executeAll(Animal[] ani) {
		for (int i=0; i<ani.length; i++) {
			if (ani[i] instanceof Person) 
				((Person) ani[i]).ticketting();
			ani[i].play();
		}
	}
}

728x90
반응형