유일하게 B 타입에 A 타입 객체를 대입하는 것만 실패해서 의아할 수 있습니다. A 타입에 B 타입 객체를 대입하는 것은 가능하지만, B 타입에 A 타입 객체를 대입하는 것은 불가능합니다.
2.11절에서 좁은 타입은 넓은 타입에 대입할 수 있지만, 넓은 타입은 좁은 타입에 대입할 수 없다고 배웠습니다. 이는 객체에도 똑같이 적용됩니다. 어떤 객체가 더 넓은가만 판단할 수 있으면 됩니다.
A 타입이 B 타입보다 더 넓은 타입입니다. 또는 더 추상적인 타입이라고 표현할 수도 있습니다. 반대로 B 타입은 A 타입보다 더 좁은 타입, 또는 더 구체적인 타입이라고 표현할 수도 있습니다. B 타입에는 name과 age 속성이 꼭 있어야 하지만, A 타입에는 name밖에 없으니 혹시나 age 속성이 없을 수 있으므로 B 타입에서 A 타입으로는 대입할 수 없습니다.
어떤 이는 A보다 B가 더 넓은 게 아니냐고 착각하곤 합니다. B가 코드의 양이 많고 A보다 차지하는 줄의 폭이 넓기 때문인데요. 이렇게 생각하면 됩니다. B가 코드의 양과 줄 수가 더 많은 이유는 그만큼 더 구체적으로 적었기 때문입니다. 구체적이라는 것은 조건을 만족하기 더 힘들다는 뜻이고, 더 좁은 타입이라는 것입니다.