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입니다.
'Java' 카테고리의 다른 글
[Java] 16. 인터페이스(Interface)와 추상클래스(abstract 클래스) (0) | 2019.04.01 |
---|---|
[Java] 15. Object 클래스 (0) | 2019.03.30 |
[Java] 13. 참조 자료형의 형 변환 (0) | 2019.03.23 |
[Java] 12. 메소드 오버라이딩(Overriding) (0) | 2019.03.23 |
[Java] 11. 상속 (0) | 2019.03.21 |