Couldn't pick a simpler one, huh?

OK, here goes.
1) we are creating a new Sub object so run the constructor of Sub.
2) Before running Sub's constructor since Sub's constructor doesn't run any parent constructor run the empty constructor of Base1.
3) Base1 runs add() but add has been overridden by Sub so run the add() method of Sub. (i = 3)
4) Now run Sub's constructor which runs the add() method of Sub (i = 7)
5) Run m() which runs the add() method which has been overridden by Sub (i=23)
6) Print the result.