Overriding vs Overloading
Overloading is when you define two methods with the same name, in the same class, distinguished by their signatures.
Overriding is when you redefine a method that has already been defined in a parent class (using the exact same signature).
Overloading is resolved at compile time.
Overriding is resolved at runtime (based on the type of the implicit first parameter).