자바인데요.. 왜 이렇게 출력이 되나요?
다미
class A{
public A(){
System.out.println(A);
}
}
class B extends A{
public B(){
this(Through B);
System.out.println(B);
}
public B(String args){
System.out.println(args);
}
}
class C extends B{
public C(){
System.out.println(C);
}
}
class D extends B{
public D(){
super(From D);
System.out.println(D);
}
}
public class Main {
public static void main (String[] args) {
A objA = new C();
D objD = new D();
return ;
}
}
출력
A
Through B
B
C
A
From D
D
1번
A objA = new C();
는 하위객체가 형성하기 위해서는 모든상위클래스의 생성자가 호출된후에 형성되기때문에
A
Through B
B
C
가 출력되는건가요?
2번
Through B가 B보다 먼저 출력되는것은 무엇때문인가요?
3번
D objD는 왜 클래스 A출력하고 클래스 B에서 B를출력을 안하나요?
부탁드립니다 ㅠㅠㅠ.
-
나오
친절한 답변 감사합니다 ㅠㅠ!!!!!!!!!!!!
-
햇님
부가설명으로 super()는 상속받은 상위 클래스의 생성자를 호출하는겁니다.
-
소아
1번 : 모든 생성자에는 super()가 맨 첫 줄에 있는게 생략돼있다고 생각하시면 쉽게 이해가 가실껍니다.
상속을 받으로면 최상위 부터 정의 되어 내려옵니다
2번 : this(\Through B\) 는 생성자의 중복함수 public B(String args)를 호출하기 때문입니다.
3번 : super(\From D\)는 중복함수중 맞는 함수를 호출하니 public B(String args)만 실행하죠