인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kimjg308님의 프로필 이미지
kimjg308

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

업캐스팅 (부모 형태, 자식 생성자)

업캐스팅 강의 5분대 내용입니다.

작성

·

146

0

바로 이전 강의에서는

자식이 부모에게 없는 것을 호출이 가능하였는데

이번 강의에서는 chargeBattery 부분이 없어서 에러가 발생한다고 하셨습니다.

에러가 나오는건 '업캐스팅' 일 때만 나오는 걸까요?

답변 1

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요,

답변은 좀 애매한데, 맞으면서도 아닙니다.

(Only 부모로 만들었는데 자식을 호출하면 에러가 발생함)

업캐스팅 형태에서 저렇게 나오면 헷갈리실까봐 특별히 짚어드린 것입니다.

 

다른 형태에서는 저럴 이유가 없습니다.

부모 형태 = new 부모생성자();

자식 형태 = new 자식생성자();

 

이렇게 되는 경우에서는 헷갈릴게 없으니까요.

저기에서 만약에 부모 형태로 만들었는데 자식 메서드를 접근하면? 당연히 본인 필드가 아니니까 오류가 납니다.

자식에서는 부모를 아예 명시적(super)으로 부를 수 있었죠?

 

감사합니다.

 

업캐스팅은 전체적으로는 부모의 느낌이나, 자식을 갈아끼울 수 있는 형태라고 생각하시면 좋습니다.

 

kimjg308님의 프로필 이미지
kimjg308
질문자

음.. '상속과 생성자 호출순서' 강의 3분대 예시를 들어준 것에서는 부모 클래스에 없는 자식클래스에 bark 를 호출 했을 때 가능하다고 이해를 해서요.

주말코딩님의 프로필 이미지
주말코딩
지식공유자

3분대에 있는 bark는 부모 클래스에 void sound() 구현되어있습니다. (Animal 클래스)

재정의한 것이라서 사용이 가능합니다.

kimjg308님의 프로필 이미지
kimjg308
질문자

아 제가 말씀드린 3분대 는 ‘상속과 생성자 호출순서’ 강의입니다. 저 강의에서는 void sound() 는 없어서요

주말코딩님의 프로필 이미지
주말코딩
지식공유자

상속과 생성자 호출순서에서 3분대의 bark는 본인 자체가 자식이어서 그렇습니다.

위에 보시면 Animal이 아니라 Dog dog = new Dog(); 입니다.

형태: Dog (자식)

변수명: dog (소문자)

new: 새로운 메모리 크기를 할당해서 객체를 생성하라는 키워드

Dog(): 매개변수 없는 Dog 클래스의 생성자 (기본 생성자라고도 불림)

 

그냥 자식 그 자체입니다. (업캐스팅도, 부모 그자체도 아님)

여기서 부모인 super class는 Animal입니다.

 

현실에서 비유하자면

부모에게서 자식이 자전거와 컴퓨터를 받았는데, 자식이 열심히 일해서 자동차를 산 것이지요.

자전거와 컴퓨터야 부모에게서 물려받았지만 내가 재정의(수리하거나 부품을 바꿔낌)하면 되는데

자동차는 내가 내돈으로 샀으니 그냥 내꺼입니다. (오로지 자식의 소유)

그래서 자동차는 사용할 수 있습니다.

 

그런데 부모 형태로 만들었다고 생각하면 어떨까요?(부모클래스명 변수명 = new 부모생성자();)

부모는 애초에 자동차가 어떻게 생긴지도 모릅니다. 평생 자전거와 컴퓨터만 봤으니까요.

 

그래서 실행할 수 없습니다.

kimjg308님의 프로필 이미지
kimjg308
질문자

아아 이해하였습니다. 친절한 설명 감사합니다!

kimjg308님의 프로필 이미지
kimjg308

작성한 질문수

질문하기