오버로딩이란?
한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
이름은 같지만 매개변수는 다름

오버로딩 조건 3가지
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 영향 없다.
int add (int a, int b) {return a+b;}
int add (int x, int y) {return x+y;}
메서드 이름 add 동일,
변수타입int 동일,
반환타입 return 동일로 오버로딩이 성립되지 않는다.
int add (int a, int b) {return a+b;}
long add (int a, int b) {return (long)a+b;}
메서드 이름 add 동일,
변수타입은 다르지만
반환타입 return 동일로 오버로딩이 성립되지 않는다.
int add (int a, int b) {return a+b;}
long add (long a, long b) {return a+b;}
메서드 이름 add 동일,
변수타입은 달라 오버로딩 성립된다.
오버라이딩 (overriding)이란?
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
- 정확하게는 메서드 오버라이딩이라고 한다.
- 선언부는 변경불가, 구현부{내용}만 변경 가능
package babylion.day5;
class MyPoint3{ //조상
int x;
int y;
String getLocation(){
return "x:"+x+",y:"+y;
}
}
class MyPoint3D extends MyPoint3{ //자식
int z;
//조상의 getLocation()을 오버라이딩(상속은 받으면서 오버라이딩 된 것이 호출된다)
String getLocation(){
return "x:"+x+", y:"+y+", z:"+z; //내용 변경
}
}
public class OverrideTest {
public static void main(String[] args) {
MyPoint3D p = new MyPoint3D(); //객체 생성
p.x = 3;
p.y = 5;
p.z = 7;
System.out.println(p.getLocation());
}
}
class MyPoint3 extends Object{
int x;
int y;
MyPoint3(int x, int y){
this.x = x;
this.y = y;
}
public String toString(){ //Object클래스의 tostring()을 오버라이딩
return "x:"+x+",y:"+y;
}
}
public class OverrideTest {
public static void main(String[] args) {
MyPoint3 P = new MyPoint3(3,5);
// P.x=3;
// P.y=5;
// System.out.println(P.toString()); //tostring 호출
System.out.println(P); //p만 호출해도 tostring 결과값과 같은 결과를 출력한다.
}
오버라이딩의 조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- **접근제어자 : (public, protected, default, private)**
- 예외는 조상 클래스의 메서드보다 많이 선언 할 수 있다.
class Point{
int x;
int y;
**String getLocation()**{ // 선언부 일치
return "x:"+x+",y:"+y;
}
}
class Point3D extends Point {
int z;
**String getLocation()** {
return "x:" + x + ",y:" + y + ",z:" + z;
}
}

오버로딩 vs 오버라이딩
- 오버로딩 : 기존에 없는 새로운 메서드(이름이 같을 뿐)를 정의하는 것 (new)
- 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것(change, modify)
**이름만 비슷하지 관계는 없다.

출처 : 자바의정석 - 기초편
'Java' 카테고리의 다른 글
| [Java] 메서드, return문, 반환값 (0) | 2023.05.31 |
|---|---|
| [Java] 생성자 this(), 참조변수 this (0) | 2023.05.31 |
| [Java] static 메서드와 인스턴스 메서드 (0) | 2023.05.30 |
| [Java] 예외처리 (0) | 2023.05.30 |
| [Java] 컬렉션과 제네릭 (0) | 2023.05.30 |