메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야한다. 그러나 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. 이처럼, 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 한다.
같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩이 되는 것은 아니다.
오버로딩이 성립하기 위해서는 다음 조건을 만족해야한다.
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
비록 메서드의 이름이 같다 하더라도 매개변수가 다르면 서로 구별될 수 있기 때문에 오버로딩이 가능한 것이다. 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.
예시)
public class Post{
String title ;
int content ;
public Post(){
}
public Post(String title){
this.title = title;
}
public Post(String title, String content) {
this.title = title;
this.content = content ;
}
}
public class PostExam{
public static void main(String args[]){
Post post1 = new Post ();
Post post2 = new Post ("제목");
Post post3 = new Post ("제목","내용");
}
}
public Post(){
this.title = "제목1"; //제목 -> "제목1"로 초기화
this.content = "내용1"; //내용 -> "내용1"로 초기화
}
기본 생성자를 호출 했을 때 this로 초기화 할 수 있다.
public Post(){
this("제목1","내용1"); /
}
this괄호 열고 시작하면 자신의 생성자 호출이 가능하다.
자기 자신의 생성자를 호출함으로써 비슷한 코드의 중복을 방지할 수 있다.