JAVA,객체지향

오버라이딩

25G 2021. 11. 25. 17:27

오버 로딩의 한계를 해결하기 위해서는 다른 방법이 필요하다.

저번과 비슷한 프로그램을 만들었는데 역시나 다음과 같은 문제가 발생한다. 유닛이 늘어날수록 오버 로딩해야 할 메서드가 너무 많아진다는 점이다.

이 문제를 해결하기 위해서 "다형성"을 하면 된다.

위그림과 같이 다형성사용

자 그러면 이제 유닛들이 자유롭게 서로를 공격할 수 있게 될까?

지금 위와 같은 경우면 유닛들이 바라보는 타입이 프로토스 유닛이기 때문에 아무런 행위도 메모리에서 찾지 못한다.

자 그럼 위 문제를 해결했는데 위 코드의 결과를 보면 부모의 타입을 가지고 있는 u1객체가 부모 클래스와 질럿 클래스에서 둘 다 똑같은 이름으로 가지고 있는 "기본 공격()"메서드를 호출했는데 "질럿 메서드"가 나오는 것을 볼 수 있다.

 

위 경우와 같이 부모 클래스의 메서드명과 자식 클래스의 메서드명이 같은 경우를 "오버라이드"라고 하는데 오버라이드는 무효화라는 뜻이다.

위 경우에서도 u1객체는 프로토스 유닛 타입을 가지고 있지만 자식이 오버라이드 한 메서드가 호출된 결과를 볼 수 있다.

 

정말 중요한 계념이다 오버 라이딩은 재사용의 개념이 아니라 부모 함수를 자식이 무효화시킨 것이다.

 

정리

오버라이딩은 다형성을 활용한 객체지향 문법이다.

오버 라이딩은 메서드 재사용의 개념이 아니라 부모의 메서드를 자식메서드가 무효화시킨 것이다.

위와 같은 경우를 "동적 바인딩"이라고 한다.

 

'JAVA,객체지향' 카테고리의 다른 글

추상클래스와 인터페이스의 차이  (0) 2021.11.26
추상클래스  (0) 2021.11.26
오버로딩과 오버로딩의 한계  (0) 2021.11.25
다형성  (0) 2021.11.21
클래스? 오브젝트? 인스턴스???  (0) 2021.11.21