override는 부모 함수의 이름을 유지한 채 자식에게 맞게 동작을 바꾼다
Dog::displayInfo()는 Animal::displayInfo()와 같은 인터페이스를 유지하면서, 부모 출력 뒤에 견종 정보를 추가합니다.
호출
myDog.displayInfo()
사용자는 같은 이름의 함수를 호출한다.
→
자식 재정의
Dog::displayInfo()
Dog에 맞는 출력 흐름으로 들어간다.
→
부모 기능 재사용
Animal::displayInfo()
공통 정보 출력 뒤 breed를 덧붙인다.
| 확인할 것 | override가 맞는 조건 | 틀리면 생기는 문제 |
|---|---|---|
| 함수 이름 | 부모와 자식의 함수 이름이 같다. | 새 함수가 생길 뿐 재정의가 아니다. |
| 매개변수 | 반환 타입과 매개변수 목록이 호환된다. | 오버로딩처럼 보이거나 컴파일 오류가 난다. |
| override 키워드 | 자식 함수 뒤에 override를 붙여 검사를 맡긴다. | 오타를 컴파일러가 잡아 주지 못한다. |
| 부모 호출 | 필요하면 Animal::displayInfo()를 먼저 호출한다. | 공통 출력이 빠지고 자식 정보만 남는다. |
읽는 순서
override는 “부모 함수를 지운다”가 아니라 “같은 약속을 유지하면서 자식 버전으로 바꾼다”입니다. 부모 구현이 필요하면 `Base::함수명()`으로 명시해 이어 붙입니다.