반응형
오버로딩
메서드도 변수와 마찬가지로 클래스 내에서 구별가능해야 한다. Java에서는 같은 이름으로 여러개의 메서드를 정의할 수 있는데 이를 메서드 오버로딩 또는 간단히 오버로딩이라고 한다. (조건이 존재)
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야한다. (매개변수 이름이 다른건 의미 없다.)
- 반환타입은 관계없다.
- 매개변수(long a, int b) → (int a, long b) 오버로딩 성립된다.
오버라이딩
자식 클래스의 맞게 부모 클래스로부터 상속받은 메서드의 내용을 변경하는 것 (그대로 사용해도 된다.)
- 예를들어 학생 수가 30명만 될 줄 알았는데 40명이 되어서 메서드 수정해야될 때
메서드의 내용만을 새로 작성하는 것이기 때문에 메서드의 선언부(메서드 이름, 매개변수, 반환타입)는 조상의 것과 완전히 일치해야 한다.
- 접근 제어자(access modifier)와 예외(exception)는 제한된 조건 하에서만 다르게 변경할 수 있다.
- 접근 제어자는 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 부모 클래스에 정의된 메서드의 접근 제어자가 protected라면 이를 오버라이딩하는 자식 클래스의 메서드는 접근 제어자가 protected나 public이어야 한다.
- 대부분의 경우 같은 범위의 접근 제어자를 사용한다. → 접근제어자 링크 넣기
- 부모 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
- 선언된 예외 개수가 부모 클래스의 선언된 메서드의 예외 개수보다 적으므로 바르게 오버라이딩 되었다.
public class Point {
int x;
int y;
public void test() throws IOException, SQLException {
}
}
public class Circle extends Point{
int r;
@Override
public void test() throws IOException{
...
}
}
자식 클래스에서 부모 클래스 메서드를 오버라이딩할 때 지켜야 할 조건
- 선언부가 부모 클래스의 메서드와 일치해야 한다.
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
💡 접근 제어자의 접근범위를 넓은 곳에서 좁은 순으로 나열하면 public → protected, (default), private
오버로딩과 오버라이딩 혼돈하지 말자
- 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것(new)
- 오버라이딩: 상속받은 메서드의 내용을 변경하는 것(change, modify)
반응형
'책 > Java의 정석' 카테고리의 다른 글
[java] 패키지(package) (0) | 2023.02.04 |
---|---|
[java] 참조변수(super) (0) | 2023.02.04 |
[java] 상속 (extends) (0) | 2023.02.04 |
[java] 생성자(constructor)와 this, this() (2) | 2023.02.03 |
[java] static (0) | 2023.02.03 |