자바의 오버로딩과 오버라이딩은 이름은 비슷하지만 아주 큰 차이를 가지고 있다.
이 둘의 개념과 차이점을 정리해 보자
메서드 오버로딩(Method overloading)
매개변수의 개수나 타입이 다를경우 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의할 수 있는 것을 말한다.
오버로딩은 아래의 조건을 따른다.
- 메서드의 이름이 서로 같아야 한다.
- 매개변수의 개수나 타입이 달라야 하며 순서가 달라도 상관없다.
public class Test {
public static void main(String[] args) {
System.out.println("메인 함수");
}
public void name(String arg1) {
}
public void name(String str, int num) {
}
public void name(int num, String str) {
}
public void name(int num, String str, boolean on) {
}
}
오버라이딩(overriding)
조상 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩 이라고 한다.
조상에게서 상속받은 메서드를 상황에 맞게 변경하기 위해 사용된다.
오버라이딩은 아래의 조건을 따른다.
- 조상클래스의 메서드와 이름이 같아야 한다.
- 조상클래스의 메서드와 매개변수가 같아야 한다.
- 조상클래스의 메서드와 리턴타입이 같아야 한다.
- 접근 제어자는 조상클래스의 메서드 보다 좁은 범위로 변경할수 없다.
- 조상클래스의 메서드 보다 많은 수의 예외를 선언할 수 없다.
import java.io.IOException;
public class Parent {
int x;
protected int add(int y) throws NullPointerException, IOException{
return x + y;
}
}
public class Child extends Parent {
int x;
protected int add(int y) throws NullPointerException {
return x + y;
}
}
위의 코드에서는 Child 클래스에 Exception도 선언이 불가하다.
Exception은 모든 예외의 조상이기 때문이다.
반응형
'Java & 스프링 > Java' 카테고리의 다른 글
[Java] 접근제어자 (0) | 2019.04.24 |
---|---|
[Java] extends(상속), implements(인터페이스), abstract(추상) (0) | 2019.04.23 |
[Java] JVM이란? (0) | 2019.04.20 |
[Java] 클래스 변수와 인스턴스 변수의 비교 (0) | 2019.04.19 |
[Java] 인스턴스 변수와 클래스 변수 (0) | 2019.04.19 |
댓글