728x90
반응형
오버로딩 Overloading이란?
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 오버로딩(또는 메서드 오버로딩)이라고 합니다.
즉, 기존에 없는 새로운 메서드를 정의합니다.
class Calculator {
int add(int a, int b) { return a+b; }
long add(long a, long b) { return (long)(a+b); }
}
- 오버로딩의 조건
- 메서드 이름이 같아야 합니다.
- 매개변수의 개수나 타입이 달라야 합니다.
오버로딩된 메서드들은 매개변수에 의해서만 서로 구별할 수 있기 때문에 반환 타입은 아무런 영향을 주지 않습니다.
즉, 반환 타입이 같든 다르든 상관없이 매개변수의 개수나 타입이 달라야 오버로딩의 조건이 성립합니다.
만약 가변인자(variable arguments)를 매개변수로 설정한다면, 해당 메서드의 매개변수 중에서 가장 마지막에 선언해야 합니다.
- 장점
- 다른 매개변수를 갖는다고 하더라도 같은 기능을 한다면 같은 메서드 이름을 가질 수 있기 때문에 메서드를 작성하거나 호출할 때 편리합니다.
- 단지 매개변수 타입이 다르다고 새 메서드 이름을 짓지 않아도 되므로 효율적입니다.
class Point {
int x;
int y;
String getLocation() {
return "x:" + x + ", y:" + y;
}
}
class Point3D extends Point {
int z;
//오버라이딩
string getLocation() {
return return "x:" + x + ", y:" + y + ", z:" + z;
}
}
- 오버라이딩의 조건
- 부모 클래스의 메서드와 이름이 같아야 합니다.
- 부모 클래스의 메서드와 매개변수가 같아야 합니다.
- 부모 클래스의 메서드와 반환 타입이 같아야 합니다.(JDK 1.5부터는 공변 반환타입(Convariant return type)이 추가되어 반환타입을 자식 클래스의 타입으로 변경하는 것이 가능해졌다.)
- 접근 제어자(Access Modifier)는 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없습니다.(public > protected > (default) > private)
- 부모 클래스의 메서드보다 Exception을 많이 선언할 수 없습니다.
- 인스턴스 메서드를 static 메서드로, static 메서드를 인스턴스 메서드로 변경할 수 없습니다.
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} //오버라이딩
void parentMethod(int i) {} //오버로딩
void childMethod() {}
void childMethod(int i) {} //오버로딩
}
참고
- 참고 자료: Java의 정석 - 남궁성 지음
728x90
반응형
'Java' 카테고리의 다른 글
super와 this (0) | 2022.05.20 |
---|---|
상속 Inheritance (0) | 2022.05.20 |
객체지향 프로그래밍(OOP, Object-Oriented Programming) (0) | 2022.05.19 |
배열 Array (0) | 2022.05.19 |
Java란? (0) | 2022.05.19 |