JAVA Programming

[36] 다형성 (Polymorphism) 이란 ?

꾸준히개발하자 2020. 7. 15. 13:32

다형성 이란?

하나의 코드가 여러 자료형으로 구현되어 실행되는 것

같은 코드에서 여러 실행 결과가 나온다.

정보은닉 , 상속 과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나이다

객체지향 프로그래밍의 유연성 , 재활용성 , 유지보수성에 기본이 되는 특징이다.

 

package polymorphism;

class Animal{	
	public void move() {
		System.out.println("동물이 움직입니다.");
	}
}
class Human extends Animal {
	
	@Override // 오버라이딩
	public void move() {
		System.out.println("사람이 두발로 걷습니다.");
	}
}
class Tiger extends Animal {

	@Override
	public void move() {
		System.out.println("호랑이가 네 발로 뜁니다.");
	}
}
class Eagle extends Animal {

	@Override
	public void move() {
		System.out.println("독수리가 하늘을 날아갑니다.");
	}
}
public class AnimalTest {
	public static void main(String[] args) {
  // Animal 타입 하나만으로 각각 돌아갈 메소드들을 동일한 메소드로 호출할수있다.
		Animal hAnimal = new Human();
		Animal tAnimal = new Tiger();
		Animal eAnimal = new Eagle();
		
		AnimalTest test = new AnimalTest();
		test.moveAnimal(hAnimal);
		test.moveAnimal(tAnimal);
		test.moveAnimal(eAnimal);
	}
	public void moveAnimal(Animal animal) { // 매개변수타입은  hAnimal tAnimal eAnimal 모두 Animal 타입이기때문에 Animal 로 타입을 정해주면 된다.
		animal.move(); // 이게 바로 다형성 : 하나의 코드가  여러 자료형의 구현이 되서 다른실행이 이루어진다. 
	}
	
	public void moveAnimal(Human animal) { 
   // 오버로딩 같은메소드인데 매개변수타입을 다르게 하면  이걸   세개를 만들어야된다.  다형성의 장점이다. 
		animal.move();
		
	}
}

 

하위클래스에서 상위클래스로 업캐스팅 한후  모두 Animal 타입이기때문에 

move() 메소드를 호출하기위한 메소드 moveAnimal 매개변수를  Animal animal 로 줬다.

animal.move() 함수를 실행함으로써  하나의 코드가 여러 자료형으로 구현이 되서 다른실행이 이루어진다

이게 바로  다형성이다.  즉  Animal 타입 하나만으로 각각 돌아갈 메소드들을 동일한 메소드로 호출할수있다.