Method Overloading occurs when multiple methods have the same name but different parameter lists (different number or types of parameters) within the same class. This is a form of compile-time polymorphism.
Method Overriding occurs when a subclass provides a specific implementation of a method that is already defined in its superclass. This is a form of runtime polymorphism.