public class Main {
	private static class PrintOnCreate {
		public PrintOnCreate(String message) {
			System.out.println(message);
		}
	}
	
	private static class BaseClass {
		private PrintOnCreate member =
		    new PrintOnCreate("BaseClass: member initialization");

		static {
			System.out.println("BaseClass: static initialization");
		}
		
		public BaseClass() {
			System.out.println("BaseClass: constructor");
			memberCalledFromConstructor();
		}
		
		public void memberCalledFromConstructor() {
			System.out.println("BaseClass: member called from constructor");
		}
	}
	
	private static class DerivedClass extends BaseClass {
		private PrintOnCreate member =
		    new PrintOnCreate("DerivedClass: member initialization");

		static {
			System.out.println("DerivedClass: static initialization");
		}

		public DerivedClass() {
			System.out.println("DerivedClass: constructor");
		}
		
		@Override
		public void memberCalledFromConstructor() {
			System.out.println("DerivedClass: member called from constructor");
		}
	}
	
	
	public static void main (String[] args) {
		BaseClass obj = new DerivedClass();
	}
}