강의

멘토링

로드맵

Inflearn brand logo image

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

김도영님의 프로필 이미지
김도영

작성한 질문수

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

Java언어 기출문제의 변형

영상 3:32 업캐스팅 호출 계산 과정

해결된 질문

작성

·

63

0

제가 푼 문제 풀이와 해설이 달라서 질문 남깁니다.

 

1. Main 함수 내 b 객체 생성하는 코드 확인하여 C 클래스 내의 C(int a)로 이동

2. C(int a) 계산 전 부모클래스 B에 동일한 형태의 변수를 사용하는 B(int a)가 먼저 계산되어야 하므로 이동

3. B의 부모클래스 A에 동일한 매개변수가 있는 생성자가 없으므로 기본 생성자 A() 호출 및 10 출력

4. B(int 100) 계산하여 100 출력

5. 이후 C(int 100) 계산 (상세 내용 생략)

위와 같은 과정으로 계산을 진행했는데, 2번 과정이 틀렸더라구요. 해설을 보니 C(int a)의 첫 행에 super가 언급되어 (a/3)을 먼저 계산한 후 33을 B(int 33)으로 대입해 계산을 이어나간 것으로 보입니다.

만약 C(int a)의 첫 행에 super가 없었다면 제가 처음 계산한 과정이 맞을까요??

답변 1

0

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

3번이 틀렸습니다. 매개변수가 있는 생성자가 없으므로가 아니라 super(매개변수)로 명시적으로 부르지 않았기 때문에 기본 생성자를 가는 것입니다.

매개변수가 똑같은 것이 있었어도 그게 자동으로 호출되지는 않습니다.

 

public class Test {
    public static void main(String args[]) {
        A b = new C(100);
    }
}

class A {
    A() {
        System.out.printf("%d ", 10);
    }
    
    A(int a) {
        System.out.printf("a>> %d ", a);
    }
}

class B extends A {
    B(int a) {
        System.out.printf("%d ", a);
    }
}

class C extends B {
    C(int a) {
        super(a / 3);
        System.out.printf("%d ", a);
    }
}

위의 코드 출력값 여전히

10 33 100 입니다.

김도영님의 프로필 이미지
김도영

작성한 질문수

질문하기