In main, the constructor for a new Extension is called. This constructor implicitly calls the super constructor, Base(). (In turn, Base() implicitly calls its own super constructor, which is Object().)
In the body of Base(), the method add(1) is called. The runtime type of this object is Extension, so
polymorphism invokes the overridden version of add in Extension.
After the Base constructor finishes, the body of the Extension constructor executes, and add(2) is called. After this constructor finishes, a (copy of a) reference to the object is passed to the bogo method, in which add(8) is called. Finally, print() is called.