'new Two();' forces the constructor 'Two:Two()' to be called
'this(2);' in turn forces 'Two:Two(int i)' to be called
the compiler has implicitly placed the statement 'super();' as the first statement in this constructor.
'One
ne()' is therefore called and prints "One's Constructor"
The method 'method()' has been overriden in 'Two'. So the call in 'One
ne()' is call to 'Two:method()'. This prints out "Two's Method".
'One
ne()' returns and we are back in 'Two:Two()' which prints 'i' and then calls 'Two:method()' one more time.
This should explain the output:
// One's Constructor
// Two's Method
// 2
// Two's Method
The statement "new Two(2)" works the same way.