다음 코드의 출력을 예상해보자. class A{ A() { f(); } public void f(){ System.out.println("3"); } } class B extends A{ int x = 4; public void f() { System.out.println(x); } } public class Main { public static void main(String[] args) { A a = new B(); } } 답은 뭘까? 3 혹은 4중에 고민하고 있다면, 그렇지 않다. 답은 0이다. java는 C++와 다르게 생성자에서도 virtual하고 순서상 A가 초기화된 후에 B가 초기화되기 때문에, x가 초기화되지 않은 상태로 출력되어 0이 출력된다. 그렇다면 생성자에서 필드를 초기화하는 클래스..