c23 [Java] 메소드 오버라이딩 (다형성)
본문 바로가기
[Java]

[Java] 메소드 오버라이딩 (다형성)

by Jarvis2304 2023. 1. 1.

▶ 메소드 오버라이딩(Method Overriding)

- 슈퍼 클래스의 메소드서브 클래스에서 재정의 하는 것

- 서브 클래스에서, 슈퍼 클래스의 메소드 중복 작성

- 슈퍼 클래스의 메소드 무력화, 항상 서브 클래스에 오버라이딩한 메소드가 실행하도록 보장됨

- 메소드 무시하기, 덮어쓰기로 번역되기도 함

- 동적 바인딩 발생 (서브 클래스에 오버라이딩된 메소드가 무조건 실행되는 동적 바인딩)

 

● 오버라이딩 조건

- 슈퍼 클래스 메소드의 원형(메소드 이름, 인자 타입 및 개수, 리턴 타입) 동일하게 작성해야함

 

 

▷ 서브 클래스 객체와 오버라이딩된 메소드 호출(오버라이딩한 메소드가 실행됨을 보장)

▶ 바인딩 

- 컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것

- 프로그램 내에서 변수, 배열, 라벨, 절차 등의 명칭, 즉 식별자가 그 대상인 메모리 주소 또는 실제값으로 배정되는 것

- 함수를 호출하는 부분에서 실제 함수가 위치한 메모리를 연결하는 것도 바인딩

- 구체적인 값을 할당하는 각각의 과정을 바인딩  ex) int num = 123;

 

▶ 정적 바인딩

- 실행 시간 전에 일어남

- 원시 프로그램의 컴파일링 또는 링크 시에 확정되는 바인딩

- 컴파일 시간에 결정된 함수가 단순히 호출

 

▶ 동적 바인딩

- 실행하는 동안 호출될 함수가 결정되며 레퍼런스가 가리키는 객체에 따라 호출되는 함수가 유동적인 상태

- 실행 시간에 일어남

- 오버라이딩된 함수가 무조건 호출

- 오버라이딩한 서브 클래스의 함수를 찾아 실행

- 실행 시간 바인딩(run-time-binding) 혹은 늦은 바인딩(late binding)이라고도 함

 

 

 

 

 

▶ 오버라이딩의 목적, 다형성 실현

- 오버라이딩으로 다형성 실현

- 하나의 인터페이스(같은 이름)에 서로 다른 내용 구현

- 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구현

 

ex) 브 클래스에서 각각 목적에 맞게 다르게 구현

Line 클래스에서 draw()는 선을 그리는 메소드

Circle 클래스에서 draw()는 원을 그리는 메소드

Rect 클래스에서 draw()는 사각형을 그리는 메소드

 

 

 

예제) 메소드 오버라이딩으로 다형성 실현

▷예제 실행과정

▷ 동적 바인딩 - 오버라이딩된 메소드 호출

 

 

 

▷ super 키워드로 슈퍼 클래스의 멤버 접근

● super.슈퍼 클래스의 멤버

 

 

 

 

 

 

 

 

▶ 오버로딩(Overloading) vs 오버라이딩(Overriding)

 

 

 

'[Java]' 카테고리의 다른 글

[Java] 패키지, 모듈  (1) 2023.01.03
[Java] 추상 클래스, 인터페이스  (0) 2023.01.02
[Java] 업캐스팅, 다운캐스팅  (0) 2022.12.31
[Java] 상속 (상속성)  (0) 2022.12.30
[Java] static, final  (0) 2022.12.29

댓글