목차
1. 오버라이딩
2. 오버로딩
3. 둘의 차이점
1. Overriding
부모 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속 받은 메서드를 그대로 사용하기도 하지만, 자식 클래스에서 자식에 맞게 변경해야 하는 경우도 있다.
코드예제
public static void main(String[] args) {
Monkey monkey = new Monkey();
monkey.Shout();
//나는 원숭이 입니다.
}
}
class Animal {
void Shout() {
System.out.println("나는 동물입니다.");
}
}
class Monkey extends Animal {
void Shout() {
//System.out.println("나는 동물입니다.");
System.out.println("나는 원숭이 입니다.");
}
}
Animal 부모 클래스의 Shout는 "나는 동물입니다."를 출력하는 메서드이다. 이를 Monkey 클래스에서 "나는 원숭이입니다."를 출력하도록 변경하였다. 기존의 Shout를 수정해서 덮어버린 것이다. 이를 오버라이딩이라고 한다.
Override 조건
- 메서드 이름이 같아야 한다.
- 매개변수가 같아야한다.
- 반환타입이 같아야 한다.
Override 제한 사항
- 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
- 인스턴스 메서드를 static메서드 또는 그 반대로 변경할 수 없다.
좁은 범위 변경 코드예제
이런 코드에 아래와 같은 오류가 발생한다. private이 protected보다 좁은 범위이기 때문이다.
* 참고 접근 제어자의 범위
public > protected > default > private
많은 수의 메서드 예외 선언 예제
자식에 선언한 에외가 더 많아 오류가 발생하였다.
물론 Exception의 개수만 영향을 주는 것은 아니다. 예를 들어 Exception은 모든 예외의 최고 조상이므로 가장 많은 개수의 예외를 던질 수 있다. 이런 경우 또한 오류가 발생한다. 아래는 예외의 수가 같음에도 불구하고 오류가 나는 코드이다.
2. Overloading
오버로딩은 기존에 없는 새로운 메서드를 추가하는 것이고, 오버라이딩은 조상으로부터 상속받은 메서드를 변경하는 것이다.
https://abcdefgh123123.tistory.com/399
3. 둘의 차이점
코드를 보며 이해해보자
class Parent {
void parentMethod() {
}
}
class Child extends Parent{
void parentMethod(){} // 오버라이딩 - 상속받은 메서드 수정
void parentMethod(int a){} // 오버로딩 - 메서드 추가
}
오버라이딩은 상속받은 메서드를 수정하는 것이다.
오버로딩은 메서드를 추가하는 것이다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 접근 제어자와 기타 제어자 (0) | 2022.06.24 |
---|---|
[Java] super란? (0) | 2022.06.23 |
[Java] 클래스 상속과 포함관계 (0) | 2022.06.23 |
[Java] 변수의 초기화 (0) | 2022.06.23 |
[Java] 생성자란? (0) | 2022.06.22 |