OverL oading과 Overriding
슈퍼클래스로부터 메소드를 상속받을 때, 서브클래스 내에 같은 이름의 메소드가 있는 경우에 시그네췌(Segnature)가 다르면 중복(overloading)이 되고 시그네췌 (Segnature) 가 같으면 재정의(overriding)가 된다.
오버라이딩
상속관계에 있는 클래스들간에 같은 이름의 메소드를 정의하는 행위
기존 클래스의 메소드 구현 부분만 약간 변화시켜 새로운 클래스를 생성할 수 있다
매개변수의 개수와 타입이 같아야 한다.
오버로딩
같은 클래스 내에 같은 이름의 생성자나 메소드를 사용하는 행위
매개변수의 개수와 타입이 달라야 한다
[오버라이딩 예제]
class A {
int i=10;
int f() { return i; }
static char g() { return 'A'; }
}
class B extends A{
int i=20; //AAC i°¡ °¡·AAo´A°IAI´U.
int f() { return -i; }//AcA¤AC
static char g() { return 'B'; }
}
public class OverrideTest {
public static void main(String[] args) {
B b = new B();
System.out.println(b.i); //20
System.out.println(b.f()); //-20
System.out.println(b.g()); //B
System.out.println(B.g()); //B
A a = b; //A a = (B) bμμ °¡´E
System.out.println(a.i); //10
System.out.println(a.f()); //-20
System.out.println(a.g()); //A
System.out.println(A.g()); //A
}
}
[오버로딩 예제]
class OverLoadingTest {
public void say() {
System.out.println("default...");
}
public void say(String msg) {
System.out.println(msg);
}
public static void main(String args[]) {
OverLoadingTest ol = new OverLoadingTest();
ol.say();
ol.say("안녕하세요~ 반갑습니다...");
}
}