매개변수의 수가 다르거나 형이 다른 경우 같은 이름으로 메서드를 여러 개 정의할 수 있는데, 이를 메서드 오버로딩이라고 한다. 여기서 중요한 점은 매개변수의 이름은 중요하지 않다는 것이다. 자료형이 중요하다.
package javaStudy;
public class MyClass2 {
public int plus (int x, int y) {
return x+y;
}
public int plus (int x, int y, int z) {
return x+y+z;
}
public String plus (String x, String y) {
return x+y;
}
}
package javaStudy;
public class MethodOverloadExam {
public static void main(String[] args) {
MyClass2 m = new MyClass2();
System.out.printIn(m.plus(4,5));
System.out.printIn(m.plus("hello","world"));
}
}
생성자도 메서드와 마찬가지로 여러 개를 선언할 수 있다. 매개변수의 수와 형만 다르다면 생성자를 여러 개 선언할 수 있다.이를 생성자 오버로딩이라고 한다.
객체에 생성자가 하나도 없을 때는 기본 생성자가 자동으로 만들어지지만, 생성자를 하나라도 정의하면 기본 생성자가 자동으로 만들어지지 않는다. 기본 생성자를 정의하지 않았을 때 컴파일 오류가 발생(The constructor Car() is undefined)
package javaStudy;
public class Car{
// 형 + 필드명
String name;
int number;
public Car(String name){
this.name = name;
}
public Car() {
this.name = "이름없음";
this.number = 0;
}
public Car(String name, int number) {
this.name = name;
this.number = number;
}
}
// 위와 아래의 코드가 반복
// 정리하자면
public Car() {
// this.name = "이름없음";
// this.number = 0;
this("이름없음",0);
}
this 키워드는 자기 자신을 가리킨다고 했는데, this에 괄호를 붙이면 자기 자신의 생성자를 의미한다. 자기 자신의 생성자에 "이름없음"과 '0'을 넣어서 호출하면 Car 객체에 기본 생성자를 호출했을 때 String 값과 int값을 가진 생성자를 호출할 것이다.
정리하면 this는 생성자를 호출하는 방법으로 정의되지 않은 생성자는 호출할 수 없다. this() 메서드를 사용하면 코드가 중복되는 것도 방지할 수 있다. 즉 this()는 생성자 내에서 해당 클래의 다른 생성자를 호출한다.