Understanding method overloading and overriding