다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.
객체지향에서 다형성의 개념이 적용된 두 가지 형태인 오버로딩과 오버라이딩이다. 오버로딩은 메서드 중복정의, 오버라이딩은 메서드 재정의를 뜻한다.
Overriding(재정의)
부모쪽에서 사용한 것을 자식클래스에서 오버라이딩을 하였다.
8. shpae 타입 객체가 S변수에 전달이 되고 Shape 클래스의 makeArea() 메서드가 호출된다.
9. Circle 타입의 매개변수가 전달되면 upcasting이 이루어진다. S변수에 전달이 되며 자료형은 Shape이기떄문에 Shape영역만 참조할수있다.
그럼에도 불구하고 Shape안에 있는 makeArea()메서드는 이미 가려진 상태이다. 그 이유는
부모메서드와 자식메서드가 똑같이 만들어지는 오버라이딩을 하였기 때문에 부모메서드가 가려지고 자식메서드가 활성화되있는 상태가 된다.
메모리구조
실행시
메모리를 보면 오버라이딩된 makeArea() 메서드가 실행되는 것을 볼 수 있다.
앞서 보듯이 전달 된 객체가 무엇인가에 따라 호출할 수 있는 것이 달라진다. 하나의 s.makeArea()의 메서드로 인해 Circle의 makeArea가 호출될 수 있고, Rectangle 의 makeArea가 호출될 수도 있다. 이것을 다형성이라고 한다.
'java' 카테고리의 다른 글
java_10_final & abstract (0) | 2021.10.21 |
---|---|
java_9_ 타입 변환 & 강제 타입 변환(Casting) (0) | 2021.10.20 |
java_8_상속(문제) (0) | 2021.10.19 |
java_8_ 상속 ( super와 this & 오버라이딩 ) (0) | 2021.10.19 |
java_7_ 상속(Inheritance) & 다형성 (0) | 2021.10.18 |