오버로딩 (overloading)
💡 오버로딩 (overloading)
- overloading = 과적, 짐을 많이 싣다.
- 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
void println()
void println(boolean x)
void println(char x)
- 오버로딩의 성립 조건 3가지
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야한다.
- 반환 타입은 영향이 없다.
- 예시
int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }
// 오버로딩 아님 ! 1번 O, 2번 X. 매개변수의 이름만 다르기 때문이다. 이 경우는 메서드 중복 정의.
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)(a+b); }
// 오버로딩 아님 ! 1번 O, 2번 X. 메서드 중복 정의.
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
// 오버로딩 맞음 ! 1번 O, 2번 타입 O.
오버라이딩 (overriding)
💡 오버라이딩 (overriding)
- overriding = 우선의, 우선적인
- 상속 받은 조상 클래스의 메서드를 자신에 맞게 변경하는 것
class Point {
int x, y;
String getLocation() { return "x: " + x + " ,y: " + y; }
}
class Point3D extends Point {
int z;
String getLocation() { return "x: " + x + " ,y: " + y + " ,z: " + z; }
}
- 오버라이딩의 조건 3가지
- 선언부가 조상 클래스의 메서드와 일치해야한다.
- 반환 타입, 메서드 이름, 매개 변수 목록이 일치!
- 접근 제어자를 조상 클래스의 접근 제어자보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
- 선언부가 조상 클래스의 메서드와 일치해야한다.
오버로딩 vs 오버라이딩
💡 오버로딩 vs 오버라이딩
- 오버로딩: 기존에 없는 이름이 같은 새로운 메서드를 정의하는 것
- 오버라이딩: 상속 받은 메서드의 내용을 변경하는 것
- 예시
class Parent {
void parentMethod() { ... }
}
class Child extends Parent {
void parentMethod() { .. } // 오버라이딩
void parentMethod(int i) { .. } // 오버로딩
void childMethod() { .. } // 메서드 정의
void childMethod(int i) { .. } // 오버로딩
void childMethod() { .. } // 에러! 중복 정의
}
'☕ JAVA' 카테고리의 다른 글
[Java] 인스턴스 메서드와 static 메서드 (0) | 2024.05.13 |
---|---|
[Java] 메서드(method) (0) | 2024.05.12 |
[Java] 클래스 변수, 인스턴스 변수, 지역 변수 (0) | 2024.05.11 |
[Java] static 키워드 (0) | 2024.05.03 |
[Java] 클래스, 객체 (0) | 2024.05.02 |