상속(Inheritance)은 부모 클래스가 가진 변수와 메서드를 자식 클래스가 그대로 물려받아 재사용하는 문법입니다. extends 키워드를 사용하며, 중복 코드를 획기적으로 줄여줍니다.
부모에게 물려받은 행동을 자식의 입맛에 맞게 재정의하는 것을 오버라이딩(Overriding)이라고 합니다. 이를 바탕으로, 부모 타입의 변수에 다양한 자식 객체들을 번갈아 끼워 넣으며 유연하게 동작시키는 객체지향의 꽃, 다형성(Polymorphism)을 구현할 수 있습니다.
부모 클래스(Animal)는 [소리내기] 버튼이 하나 있는 '만능 리모컨'과 같습니다.
이 리모컨을 강아지(Dog 객체)에게 향하고 누르면 "멍멍!" 소리가 나고, 고양이(Cat 객체)에게 향하고 누르면 "야옹~" 소리가 납니다. 리모컨(부모 변수)은 똑같지만, 연결된 가전제품(자식 인스턴스)이 무엇이냐에 따라 결과가 다르게(다형성) 나타나는 것이죠.
| 비교 항목 | 오버로딩 (Overloading) | 오버라이딩 (Overriding) |
|---|---|---|
| 개념 | 같은 이름의 메서드를 매개변수만 다르게 여러 개 만드는 것 | 부모에게 물려받은 메서드를 자식이 덮어쓰기(재정의) 하는 것 |
| 적용 위치 | 같은 클래스 내부 | 상속 관계 (부모-자식 간) |
| 메서드 이름 | 같아야 함 | 같아야 함 |
| 매개변수 (파라미터) | 반드시 달라야 함 (타입, 개수 등) | 반드시 완벽히 같아야 함 |