옵션 |
|
public class Circle {
private double radius;
public Circle(){
System.out.println("Circle()");
}
public Circle(double radius) {
this();
this.radius = radius;
System.out.println("Circle(double radius)" + this.radius);
}
}
class SubCircle extends Circle
{
private Circle inner = new Circle(1);
public SubCircle() {
super(5);
System.out.println( "SubCircle()" );
}
public static void main(String args[]) {
new SubCircle();
}
}
위 코드를 출력하면
Circle()
Circle(double radius)5.0
Circle()
Circle(double radius)1.0
SubCircle()
이런 출력결과가 나오는데 이해가 잘 안되네요. 처음 메인에서 SubCircle 객체를 생성하면
1. super(5)===> Circle(5) 가 실행되고
2. Circle(5) 생성자 안에서 Circle() 생성자 실행 ==> "Circle()" 출력
3. 다음 "CIrcle(5.0)" 출력
다음에 "SubCircle()"가 출력 되야하는것이 아닌가요? System.out.println( "SubCircle()" ); 이 라인이 SubCircle() 생성자 안에 같이 있으니까
Circle()
Circle(double radius)5.0
SubCircle()
이런식으로 출려되야 되는것이 아닌가요?
왜 private Circle inner = new Circle(1); 라인이 먼저 실행되고 서브서클이 제일 나중에 출력되나요?
만약 SubCircle 객체가 생성될때 객체안 프라이비트 변수 초기화가 제일 먼저 실행된다고 치면
Circle()
Circle(double radius)1.0
Circle()
Circle(double radius)5.0
SubCircle()
이렇게 출려되야 하는것 아닌가요?