해결된 질문
작성
·
58
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
일반 생성자든 업캐스팅 생성자든 위의 규칙은 동일하군요 ~ 감사합니다.