Velmurugan said it correctly. If a method is private, it is only available to that class and not any subclasses. Therefore, when you say b.aMethod it is going to run the aMethod of the Base class and not do dynamic binding, because it is a private method. If it was protected, public or "friendly" then it would act as normal polymorphic behavior.
Know in the second example, you are creating an anonymouse inner class inside of main, and then when you said .aMethod() you are not saying b.aMethod(); and Calling b which is of type Base, you are just saying aMethod(); so you get the aMethod of the anonymous class.
Bill
PS. HTH stands for Hope that Helps