부모 인터페이스를 유지
Dog는 Animal처럼 사용할 수 있다는 의미를 가장 직접적으로 표현합니다.
Base public
Derived public으로 유지
Base protected
Derived protected로 유지
부모의 public, protected 멤버가 파생 클래스 안과 바깥에서 어떻게 보이는지에 따라 “is-a” 관계인지 구현 재사용인지가 갈립니다.
Dog는 Animal처럼 사용할 수 있다는 의미를 가장 직접적으로 표현합니다.
파생 계층 내부에서는 쓰지만, 객체 사용자에게 부모 API를 공개하지 않습니다.
외부에는 부모 타입처럼 보이지 않게 하고 내부 구현의 재료로만 사용합니다.
외부 코드가 파생 객체를 부모 타입으로 다뤄도 자연스럽다면 public 상속이 맞습니다. 그렇지 않다면 합성이나 private 상속을 다시 비교합니다.