본문 바로가기
2-1 학기/OOP

[JAVA] 메소드 오버라이딩(Method Overriding)

by bona.com 2023. 5. 30.

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

메소드 오버라이딩은 슈퍼 클래스와 서브 클래스의 메소드 사이에 발생하는 관계로서, 슈퍼 클래스에서 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 갖는 메소드를 서브 클래스에서 재작성하는 것이다.

 

동적 바인딩

슈퍼 클래스의 메소드를 무시하고 서브 클래스에서 오버라이딩 된 메소드가 무조건 실행되도록 처리하는 것을 동적 바인딩이라고 한다.

 

제약 사항

1. 슈퍼 클래스의 메소드와 동일한 원형으로 작성한다.

  • 슈퍼 클래스의 메소드와 동일한 이름, 동일한 매개변수 타입과 개수, 동일한 리턴 타입을 갖는 메소드를 작성해야 한다.

 

2. 슈퍼 클래스 메소드의 접근 지정자보다 접근의 범위를 좁여 오버라이딩할 수 없다.

  • 슈퍼 클래스에서 protected로 선언된 메소드는 서브 클래스에서 protected나 public으로만 오버라이딩 할 수 있다.

 

3. static이나 private 또는 final로 선언된 메소드는 서브 클래스에서 오버라이딩할 수 없다.

 

오버라이딩과 super 키워드

다음과 같이 서브 클래스에서 super 키워드를 이용하면 정적 바인딩을 통해 슈퍼 클래스의 멤버에 접근할 수 있다.

suepr.슈퍼클래스의멤버

super는 자바 컴파일러에 의해 지원되는 것으로 슈퍼 클래스에 대한 레퍼런스이다.

super를 이용하면 슈퍼 클래스의 필드와 메소드 모두 접근 가능하다.

 


this, this(), super, super()의 사용에 대해 정리해보자.

this와 super는 모두 레퍼런스로서 this로는 현재 객체의 모든 멤버를, super로는 현재 객체 내에 있는 슈퍼 클래스 멤버를 접근할 수 있다.

그리고 super로 메소드를 호출하면 정적바인딩을 실행한다. 한편 this()와 super()는 모두 메소드 호출이며, this()는 생성자에서 다른 생성자를 호출할 때 사용하고, super()는 서브 클래스의 생성자에서 슈퍼클래스의 생성자를 호출할 떄 사용한다.

'2-1 학기 > OOP' 카테고리의 다른 글

[JAVA] Wrapper 클래스  (0) 2023.05.31
[JAVA] Object 클래스  (0) 2023.05.31
[JAVA] 업캐스팅과 instanceof 연산자  (0) 2023.05.23
[JAVA] 추상 클래스 vs. 인터페이스  (0) 2023.05.23
[JAVA] 상속  (0) 2023.05.09