본문 바로가기
Java

[Java] 14. 다형성(Polymorphism)

by byeongoo 2019. 3. 26.

Polymorphism

우리나라 말로 다형성이라고 합니다. 다형성이란 "형태가 다양하다"라는 말입니다. Overriding과 형 변환을 이해했으면 다형성은 쉽습니다. 다음과 같은 ChildOther라는 클래스를 만들어 봅시다.

 

1
2
3
4
5
6
7
8
9
package c.inheritance;
 
public class ChildOther extends Parent{
    public ChildOther() {
    }
    public void printName() {
        System.out.println("printName() - ChildOther");
    }
}
 

 

 

Parent클래스의 자식 클래스가 2개가 된 것입니다. 자식이 더 있을 수 있냐고 궁금해 할 수 있는데, 자바의 자식 클래스는 몇개가 되도 상관없습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package c.inheritance;
 
public class Inheritance {
    
    public void callPrintNames() {
        Parent parent1 = new Parent();
        Parent parent2 = new Child();
        Parent parent3 = new ChildOther();
        
        parent1.printName();
        parent2.printName();
        parent3.printName();
    }
    
    public static void main(String[] args) {
        Inheritance inhe = new Inheritance();
        inhe.callPrintNames();
    }
}
 

 

 

 

각 객체의 타입은 모두 Parent 타입으로 선언되어 있는데도 불구하고, printName() 메소드의 결과는 상이합니다. 다시 말해, 선언시에는 모두 Parent 타입으로 선언했지만, 실제 메소드 호출된 것은 생성자를 사용한 클래스에 있는 것이 호출되었습니다. 왜냐하면, 각 객체의 실제 타입은 다르기 때문입니다. 이와 같이 "형 변환을 하더라도, 실제 호출되는 것은 원래 객체에 있는 메소드가 호출된다"는 것이 바로 다형성이고 Polymorphism입니다.