작성
·
146
답변 1
0
안녕하세요,
답변은 좀 애매한데, 맞으면서도 아닙니다.
(Only 부모로 만들었는데 자식을 호출하면 에러가 발생함)
업캐스팅 형태에서 저렇게 나오면 헷갈리실까봐 특별히 짚어드린 것입니다.
다른 형태에서는 저럴 이유가 없습니다.
부모 형태 = new 부모생성자();
자식 형태 = new 자식생성자();
이렇게 되는 경우에서는 헷갈릴게 없으니까요.
저기에서 만약에 부모 형태로 만들었는데 자식 메서드를 접근하면? 당연히 본인 필드가 아니니까 오류가 납니다.
자식에서는 부모를 아예 명시적(super)으로 부를 수 있었죠?
감사합니다.
업캐스팅은 전체적으로는 부모의 느낌이나, 자식을 갈아끼울 수 있는 형태라고 생각하시면 좋습니다.
상속과 생성자 호출순서에서 3분대의 bark는 본인 자체가 자식이어서 그렇습니다.
위에 보시면 Animal이 아니라 Dog dog = new Dog(); 입니다.
형태: Dog (자식)
변수명: dog (소문자)
new: 새로운 메모리 크기를 할당해서 객체를 생성하라는 키워드
Dog(): 매개변수 없는 Dog 클래스의 생성자 (기본 생성자라고도 불림)
그냥 자식 그 자체입니다. (업캐스팅도, 부모 그자체도 아님)
여기서 부모인 super class는 Animal입니다.
현실에서 비유하자면
부모에게서 자식이 자전거와 컴퓨터를 받았는데, 자식이 열심히 일해서 자동차를 산 것이지요.
자전거와 컴퓨터야 부모에게서 물려받았지만 내가 재정의(수리하거나 부품을 바꿔낌)하면 되는데
자동차는 내가 내돈으로 샀으니 그냥 내꺼입니다. (오로지 자식의 소유)
그래서 자동차는 사용할 수 있습니다.
그런데 부모 형태로 만들었다고 생각하면 어떨까요?(부모클래스명 변수명 = new 부모생성자();)
부모는 애초에 자동차가 어떻게 생긴지도 모릅니다. 평생 자전거와 컴퓨터만 봤으니까요.
그래서 실행할 수 없습니다.
음.. '상속과 생성자 호출순서' 강의 3분대 예시를 들어준 것에서는 부모 클래스에 없는 자식클래스에 bark 를 호출 했을 때 가능하다고 이해를 해서요.