언어/Java
[Java] 오버로딩 vs 오버라이딩
개발자들아제발자
2022. 6. 22. 21:27
오버로딩(overloading)이란?
한 클래스 내에 같은 이름의 메소드를 여러 개 정의하는 것을 '오버로딩'이라 한다.
메소드의 이름을 절약할 수 있다는 장점이 있다.
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.
ex) println 메소드
void println()
void println(boolean x)
void println(char x)
void println(int x)
void println(long x)
...
오버라이딩(overwriting)이란?
조상 클래스로부터 상속받은 메소드의 내용을 변경하는 것을 오버라이딩이라고 한다.
class Point {
int x, y;
String getLocation() {
return "x: " + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
// 메소드 내용 변경 z 추가
String getLocation() {
return return "x: " + x + ", y: " + y + ", z: " + z;
}
}
오버라이딩(overwriting) 조건
자손 클래스에서 오버라이딩하는 메소드는 조상 클래스의 메소드와
- 이름이 같아야 한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
- 접근 제어자는 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없다.
- 조상 클래스의 메소드보다 많은 수의 예외를 선언할 수 없다.
조상 클래스의 메소드를 자손 클래스에서 오버라이딩할 때
1. 접근 제어자를 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없다.
2. 예외는 조상 클래스의 메소드보다 많이 선언할 수 없다.
3. 인스턴스 메소드를 static메소드로 또는 그 반대로 변경할 수 없다.
오버로딩 vs 오버라이딩
오버로딩(overloading) 기존에 없는 새로운 메소드를 정의하는 것(new)
오버라이딩(overriding) 상속받은 메소드의 내용을 변경하는 것(change, modify)
class Parent {
void parentMethod() { }
}
class Child extends Parent {
void parentMethod() { } // 오버라이딩
void parentMethod(int i) { } // 오버로딩
void childMethod() { }
void childMethod(int i) { } // 오버로딩
void parentMethod() { }
}
참조: 자바의 정석 1편