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

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

정대진님의 프로필 이미지
정대진

작성한 질문수

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

자바 질문 하나만 하겠습니다!

해결된 질문

작성

·

70

0

class Parent {

Parent() {

System.out.println("Parent default");

}

 

class Child extends Parent {

System.out.println("Child Default");

}

 

 

 

public class Test{

public static void main(String[] args){

Child child = new Child();

}

 

}

 

 

위의 코드가 실행이 된다면 생성자가 자식이기 때문에 Child Default만 출력되지만

 

만약 Parent child = new Child(); 일 경우에는 부모기본생성자 실행 후 자식 기본생성자가 실행되어 아래처럼 출력이 되는게 맞을까요..??

Parent default

Child Default

답변 2

0

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

아니요, 업캐스팅 아니어도 부모 먼저 출력됩니다.

코드 상태가 약간 이상해서 아래 코드를 의도하신 것이 맞는지 확인해주세요.

class Parent {

    // Parent 클래스의 기본 생성자
    Parent() {
        System.out.println("Parent default");
    }
}

// Parent 클래스를 상속받는 Child 클래스
class Child extends Parent {

    // Child 클래스의 기본 생성자
    Child() {
        System.out.println("Child Default");
    }
}

public class Test {
    public static void main(String[] args) {
        // Child 객체 생성
        Child child = new Child();
    }
}

 

출력값은 부모 생성자 -> 자식 생성자 순이기 때문에

 

Parent default

Child Default

 

이렇게 출력되는 것이 맞습니다.

 

이건 업캐스팅이라도 똑같습니다.

class Parent {
    Parent() {
        System.out.println("Parent default");
    }
}

class Child extends Parent {

    Child() {
        System.out.println("Child Default");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
    }
}

 

이 코드도 똑같이

Parent default

Child default

입니다.

 

업캐스팅이든 아니든 부모 기본 생성자를 먼저 출력합니다.

 

어떤 형태든 상속을 받았다면

부모의 생성자가 끝난 다음에 자식 생성자가 끝나야 합니다.

부모를 초기화 다 하고 자식이 초기화 해야합니다.

이 원칙은 애초에 그 어느 예제에서도 변한 적이 없습니다.

 

+ 질문 여러 개 하셔도 좋습니다.

정대진님의 프로필 이미지
정대진
질문자

일반 생성자든 업캐스팅 생성자든 위의 규칙은 동일하군요 ~ 감사합니다.

0

정대진님의 프로필 이미지
정대진
질문자

올려주신 java 상속을 정리하는 문제 10개 강의에서 유형 1 이랑 유형 10이 헷갈려서 질문드립니다 !

정대진님의 프로필 이미지
정대진

작성한 질문수

질문하기