//////
Search
🗒️

오버라이딩

날짜
2022/09/26
작성자
전수진
황민우
카테고리
회고

오버라이딩

상속관계에서 부모의 함수를 덮어쓰는 것
Sub 클래스에서 super 클래스에서와 같은 이름의 멤버를 다시 정의
기존의 멤버를 요구사항에 맞게 수정하는 효과
Super 클래스에서와 동일한 형태로 정의
Super 클래스에서 상속된 멤버는 은폐됨
Sub 클래스 객체의 메서드에서의 은폐된 멤버에 접근하기 위해 super 참조변수 이용

방법

1.
오버라이딩할 메서드에 @Override 어노테이션을 붙여준다.
2.
메서드 이름과 파라미터가 상속클래스의 메서드와 똑같이 작성해야만 한다.
@Override 어노테이션 꼭 필요할까?
어노테이션을 안 붙인다고 에러가 발생하는 것은 아니지만, Override 어노테이션이 붙은 메서드가 상속 클래스에 존재하지 않는다면 컴파일에러가 발생한다.
@Override 어노테이션을 붙여 오버라이딩한 메서드임을 표시해줄 수 있고, 오버라이딩할 메서드가 상속 클래스에 존재하는지 확인할 수 있다.

예시

class Person { public void greeting() { System.out.println("안녕하세요"); } } class Programmer extends Person { @Override public void greeting() { System.out.println("안녕하세요. 개발자입니다."); } @Override // 상속 클래스에 해당하는 메서드가 없어 에러가 발생한다. public void hi() { System.out.println("안녕하세요."); } } public class Test { public static void main(String[] args) { Programmer programmer = new Programmer(); programmer.greeting(); // 안녕하세요. 개발자입니다. } }
Java
복사

오버라이딩 vs 오버로딩

오버로딩

같은 함수 이름으로 파라미터의 데이터타입 또는 개수를 달리할 수 있다.

예시

// System.out.pringln() 오버로딩 예시 public void println() { newLine(); } public void println(boolean x) { if (getClass() == PrintStream.class) { writeln(String.valueOf(x)); } else { synchronized (this) { print(x); newLine(); } } } public void println(char x) { if (getClass() == PrintStream.class) { writeln(String.valueOf(x)); } else { synchronized (this) { print(x); newLine(); } } } // ...
Java
복사

새로 알게 된 점.

수진- 오버라이딩을 사용할수 있는 조건에 대해서 알게되었다.