메서드 오버로딩(Overloading) ? 메서드 오버라이딩(Overriding)?
메서드 오버로딩
ㄴ 매개변수가 다른 메서드를 여러 개 정의 하는 것.
ㄴ 메서드 이름이 같아야 함.
ㄴ loading 은 과적. 물건을 쌓는다는 의미
ㄴ 칸마다 기능이 다른 기차를 생각하면 편함
YH 특급열차
| 머리 | 침실 | 짐칸 | 머리 |
필요에 의해(인기가 너무 좋아져서) 칸(파라미터) 수를 늘림.
YH 특급열차
| 머리 | 식당칸 | 침실 | 예체능실 | 영화관 | 객실 | 머리 |
메서드 오버로딩
ㄴ 하위 클래스에서 상위 클래스의 메서드를 재정의 하는 과정. 상속 관계에서 사용됨.
ㄴ 뭔가 얹어서 덮어씌운는 것.
ㄴ 위에서 내려다 본 케익 생각하면 편함.
ㄴ 시작은 초코 케잌으로 시작했으나, 끝은 딸기케잌 일지니!!

메서드 오버라이딩 조건
- 메서드 이름이 같아야 함.
- 파라미터 타입, 순서, 개수가 같아야 함.
- 반환타입이 같아야 함. 단, 반환타입이 하위 클래스 타입이 될 수 있음.
public SuperAnimal returnAnimal(){
SuperAnimal animal = new SuperAnimal();
return animal;
}
@Override
public SubBird returnAnimal(){
SubBird animal = new SubBird();
return animal;
}
- 오버라이딩 메서드의 접근 제어자는 상위 클래스의 메서드보다 더 제한적이어서는 안 됨.
public SuperAnimal returnAnimal(){
SuperAnimal animal = new SuperAnimal();
return animal;
}
@Override
protected SubBird returnAnimal(){
SubBird animal = new SubBird();
return animal;
}
ㄴ override 된 메서드의 접근제어자가 protected. 즉, public 보다 제한적이므로 사용 불가.

- 오버라이딩 메서드는 상위 클래스의 메서드보다 더 많은 체크 예외를 throws 로 선언할 수 없음. (이건 추후 알아보고)
- static, final, private 키워드가 붙은 메서드는 오버라이딩 될 수 없음.
ㄴ static : method(클래스 영역)에 저장, 관리됨. 인스턴스 Override의 의미가 없음. 공용되는 자원임.
ㄴ final : 값을 바꾸지 않겠다는 키워드. 따라서 Override(덮어씌우기) 불가.
ㄴ private : 선언된 클래스 내에서만 사용. 상속될 수 없음 = Override 불가.
- 생성자 오버라이딩 : 생성자는 오버라이딩 할 수 없음.