오버로딩
: 한 클래스 안에 같은 이름의 메서드를 여러개 정의하는 것
대표적인 오버로딩
void println()
void println(char x)
void println(int x)
void println(String x)
...
오버로딩 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 영향 없다.
오버로딩 예제
매개변수는 다르지만 같은 의미의 기능 수행
class Math {
int add(int a, int b) {
return a+b;
}
long add(long a, long b) {
return a+b;
}
int add(int[] a) {
int result = 0;
for(int i=0; i<a.length; i++)
result += a[i];
return result;
}
}
오버라이딩
: 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 (override 덮어쓰다)
class Point {
int x;
int y;
String getLocation() {
return x + "," + y;
}
}
class Point3D extends Point {
int z;
// 오버라이딩
String getLocation() { // 선언부는 변경 불가능
return x + "," + y + "," + z;
}
}
오버라이딩 조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
오버로딩 vs 오버라이딩
사실 관계는 없지만 이름이 비슷해서 관련이 있는 것 처럼 보임.
- 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것 NEW
- 오버라이딩: 상속받은 메서드의 내용을 변경하는 것 CHANGE
class Parent {
void pMethod() {}
}
class Child {
void pMethod() {} // 오버라이딩
void pMethod(int i) {} // 오버로딩
void cMethod() {} // 메서드 정의
void cMethod(int i) {} // 오버로딩
void cMethod() {} // 중복정의(에러)
}
728x90
반응형
'객체지향 OOP' 카테고리의 다른 글
[자바의정석 기초 객체지향 개념] package, import (0) | 2022.05.30 |
---|---|
[자바의정석 기초 객체지향 개념] 참조변수 super, 생성자 super() (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 상속 VS 포함 (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 메서드 (0) | 2022.05.29 |
[자바의정석 기초 객체지향 개념] 클래스와 객체 (0) | 2022.05.29 |
댓글