슈퍼클래스로부터 메소드를 상속받을 때, 서브클래스 내에 같은 이름의 메소드가 있는 경우에 시그네췌(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("안녕하세요~ 반갑습니다..."); } }