본문 바로가기

프로그래밍 언어 기초/JAVA

Chapter 13. 다형성(Polymorphism)

13. 다형성이란(Polymorphism)?

 자바에서 데이터는 자료형을 통해 객체로 생성될 수 있습니다. 이러한 객체는 기본적으로는 한가지 자료형에 종속되는데요. 하지만 객체지향 프로그래밍을 추구하는 자바에서는 부모 클래스를 상속하거나 인터페이스를 상속받으면 자기 자신만을 자료형으로 하는 게 아니라 부모 클래스나 인터페이스를 자료형으로 하여 객체를 상속할 수 있습니다. 이러한 원리로 인해 자바 내의 모든 reference type의 객체들은 최상위 클래스인 Object를 자료형으로 하여 선언할 수 있는 것입니다.

 

자바에선 이렇게 하나의 객체가 여러 자료형으로 참조하여 객체를 생성할 수 있는 것을 다형성(Polymorphism)이라고 합니다.

 

부모 클래스의 선언

public abstract class Animal {
	
	protected int age;
	
	abstract void cries();

}

 

인터페이스의 선언

public interface Teeth {
	
	void bite();
	void scratch();

}

 

자식클래스의 상속

public class Dog extends Animal implements Teeth{
		
	// 추상메소드
	@Override
	void cries() {
		System.out.println(this.getClass().getName()+"는 멍멍 하고 울어요!");		
	}
	
	// 인터페이스
	@Override
	public void bite() {
		System.out.println("멍멍이가 한입 물기를 시전하였다.");		
	}

	@Override
	public void scratch() {
		System.out.println("멍멍이가 날카로운 이빨로 할퀴를 시전하였다.");		
	}

}

 

다형성 테스트

public class PolymorphismTest {
	
	public static void main(String[] args) {
		
		// 클래스 Dog는 Animal을 상속받고, Teeth 인터페이스도 상속받았기에
		// 다음과 같이 세가지 자료형으로 선언 가능하며, 
		// 이것은 다형성(Polymorphism)으로 인해 여러 타입의 자료형으로써 선언될 수 있기 때문!
		Animal a1 = new Dog();
		Dog d1 = new Dog();
		Teeth t1 = new Dog();
		
		// 이러한 성질을 다형성이라고 일컫는다.
		
	}

}