부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라 한다. (오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야한다.)
class Person {
void cry() {
System.out.println("흑흑");
}
}
class Child extends Person {
@Override
void cry() {
System.out.println("잉잉");
}
}
자바의 한 클래스 내에 동일한 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메소드를 정의할 수 있다.
class OverloadingMethods {
public void print() {
System.out.println("오버로딩1");
}
String print(Integer a) {
System.out.println("오버로딩2");
return a.toString();
}
void print(String a) {
System.out.println("오버로딩3");
System.out.println(a);
}
String print(Integer a, Integer b) {
System.out.println("오버로딩4");
return a.toString() + b.toString();
}
}
구분 | 오버라이딩 | 오버로딩 |
---|---|---|
접근 제어자 | 부모 클래스의 메소드 접근 제어자보다 더 넓은 범위만 가능 | 모든 접근 제어자 사용가능 |
메소드명 | 동일해야 함 | 동일해야 함 |
매개변수 | 동일해야 함 | 달라야 함 |
리턴형 | 동일해야 함 | 달라도 됨 |
적용범위 | 상속 관계에서 적용 | 같은 클래스 내에서 적용 |