오버로딩(Overloading)
같은 이름의 메서드를 여러개 생성하지만 매개변수의 개수 또는 매개변수의 타입이 다르면 정의할 수 있다.
class OverloadingTest {
public static void main(String[] args){
OverloadingTestMethod otm = new OverloadingTestMethod();
otm.print("오버로딩 테스트");
System.out.println(otm.print(3));
otm.print("오버로딩 테스트", 4);
}
}
class OverloadingTestMethod {
void print(String a){
System.out.println("문자열 오버로딩");
}
String print(int a){
System.out.println("숫자 오버로딩");
return a.toString();
}
void print(String a, int b){
System.out.println("문자열, 숫자 오버로딩");
}
}
* 사용하는 이유
메소드의 이름을 절약할 수 있다.
오버로딩의 대표적인 예로는 println() 메소드가 있다. println()의 메소드를 사용할때 매개변수가 다른 종류의 데이터일 경우 printlnInt, printlnString, printlnDouble 등 수많은 메소드의 이름을 지정해야한다.
이렇게 불필요한 같은 메소드를 필요 없이 오버로딩을 통해 매개변수가 다르고 같은 이름의 메소드를 설정한다.
오버라이딩(Overriding)
부모 클래스가 가지고 있는 메소드를 자식 클래스에서 상속받아 재정의하여 사용하는걸 오버라이딩이라고 한다.
상속받은 부모 클래스를 그대로 사용할 수도 있지만 자식 클래스에서 상황에 맞게 변경해야할때 오버라이딩을
사용한다.
주의할점은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하는
메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
class OverridingTest {
public static void main(String[] args){
OverridingTestMethod otm = new OverridingTestMethod();
OverridingChild oc = new OverridingChild();
OverridingChildChild occ = new OverridingChildChild();
otm.print();
oc.print();
occ.print();
}
}
class OverridingTestMethod{
void print() {
System.out.println("오버라이딩 테스트1");
}
}
class OverridingChild extends OverridingTestMethod {
@Override
public print(){
System.out.println("오버라이딩 테스트2");
}
}
class OverridingChildChild extends OverridingTestMethod {
@Override
public print(){
System.out.println("오버라이딩 테스트3");
}
}