IT
자바 Overriding(오버라이딩)
오버라이딩이란?
-
오버라이딩(Overriding)은 상속받은 메서드를 자식 클래스에서 같은 이름, 같은 매개변수, 같은 반환 타입으로 다시 정의하는 것입니다.
-
자식 클래스는 부모 클래스의 기본 동작을 변경하거나 확장할 수 있습니다.
오버라이딩의 문법
@Override
public 반환타입 메서드이름(매개변수목록) {
// 새로운 구현 내용
}
-
@Override 어노테이션은 컴파일러에게 오버라이딩을 명시적으로 알려주는 역할을 합니다.
-
어노테이션을 생략해도 작동하지만, 붙이는 것이 일반적으로 권장됩니다. 실수로 메서드 시그니처가 달라질 경우 오류를 바로 알 수 있기 때문입니다.
예제 코드
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("강아지가 멍멍 짖습니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
a.sound(); // 출력: 강아지가 멍멍 짖습니다.
}
}
-
Dog 클래스는 Animal 클래스의 sound() 메서드를 오버라이딩했습니다.
-
Animal a = new Dog(); 형태는 업캐스팅이 적용된 형태이며, 실행 시에는 Dog 클래스의 sound()가 호출됩니다. 이것이 다형성입니다.
오버라이딩 조건 정리
조건
설명
메서드 이름
부모 클래스와 동일해야 함
매개변수 리스트
부모 클래스와 정확히 일치해야 함
반환 타입
부모 클래스와 같거나 더 좁은 범위(covariant)
접근 제어자
부모보다 좁아질 수 없음 (동일하거나 더 넓어야 함)
예외 처리
부모가 던지는 예외보다 같거나 더 적은 예외를 던져야 함
오버라이딩과 오버로딩의 차이
구분
오버라이딩(Overriding)
오버로딩(Overloading)
정의
상속 관계에서 메서드 재정의
같은 클래스 내에서 메서드 이름 재사용
시그니처
동일해야 함
매개변수 개수 또는 타입이 달라야 함
목적
부모 클래스의 기능 수정
다양한 인자에 대응하는 유연성 제공
왜 오버라이딩을 사용하는가?
-
다형성 구현
-
상위 타입으로 선언된 객체가 실제로는 하위 클래스의 메서드를 실행할 수 있게 함.
-
기능 확장
-
기본 기능을 자식 클래스에 맞게 재정의하여 더 유용하게 사용 가능.
-
공통 인터페이스 사용 가능
-
인터페이스나 추상 클래스에서 정의한 메서드를 자식 클래스에서 구체화할 수 있음.
댓글
아직 댓글이 없습니다.
로그인 후 댓글을 남길 수 있습니다.