B b = new B("Test");
This causes class B to be initialized, but before that, it needs to initialize B's direct superclass A, since no constructor was called in A, it uses the default: A(), which in turn calls constructor A(String s,String t) because of the signature used, which in turn calls another constructor A(String s) because of the signature, which then prints "12". when it finally back to class B, constructor B(String s) is called also because of signature, which then prints "test".
According to java language specification: "Before a class is initialized, its direct superclass must be initialized"
[This message has been edited by Li Yi (edited June 22, 2001).]