public class Main {
private static class PrintOnCreate {
public PrintOnCreate
( String 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( ) ;
}
}
cHVibGljIGNsYXNzIE1haW4gewoJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJpbnRPbkNyZWF0ZSB7CgkJcHVibGljIFByaW50T25DcmVhdGUoU3RyaW5nIG1lc3NhZ2UpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOwoJCX0KCX0KCQoJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQmFzZUNsYXNzIHsKCQlwcml2YXRlIFByaW50T25DcmVhdGUgbWVtYmVyID0KCQkgICAgbmV3IFByaW50T25DcmVhdGUoIkJhc2VDbGFzczogbWVtYmVyIGluaXRpYWxpemF0aW9uIik7CgoJCXN0YXRpYyB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiQmFzZUNsYXNzOiBzdGF0aWMgaW5pdGlhbGl6YXRpb24iKTsKCQl9CgkJCgkJcHVibGljIEJhc2VDbGFzcygpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJCYXNlQ2xhc3M6IGNvbnN0cnVjdG9yIik7CgkJCW1lbWJlckNhbGxlZEZyb21Db25zdHJ1Y3RvcigpOwoJCX0KCQkKCQlwdWJsaWMgdm9pZCBtZW1iZXJDYWxsZWRGcm9tQ29uc3RydWN0b3IoKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiQmFzZUNsYXNzOiBtZW1iZXIgY2FsbGVkIGZyb20gY29uc3RydWN0b3IiKTsKCQl9Cgl9CgkKCXByaXZhdGUgc3RhdGljIGNsYXNzIERlcml2ZWRDbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7CgkJcHJpdmF0ZSBQcmludE9uQ3JlYXRlIG1lbWJlciA9CgkJICAgIG5ldyBQcmludE9uQ3JlYXRlKCJEZXJpdmVkQ2xhc3M6IG1lbWJlciBpbml0aWFsaXphdGlvbiIpOwoKCQlzdGF0aWMgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWRDbGFzczogc3RhdGljIGluaXRpYWxpemF0aW9uIik7CgkJfQoKCQlwdWJsaWMgRGVyaXZlZENsYXNzKCkgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWRDbGFzczogY29uc3RydWN0b3IiKTsKCQl9CgkJCgkJQE92ZXJyaWRlCgkJcHVibGljIHZvaWQgbWVtYmVyQ2FsbGVkRnJvbUNvbnN0cnVjdG9yKCkgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWRDbGFzczogbWVtYmVyIGNhbGxlZCBmcm9tIGNvbnN0cnVjdG9yIik7CgkJfQoJfQoJCgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CgkJQmFzZUNsYXNzIG9iaiA9IG5ldyBEZXJpdmVkQ2xhc3MoKTsKCX0KfQ==