Skip to main content
Overriding and Overloading
- Methods can be overridden or overloaded; constructors can be overloaded but not overridden.
- Abstract methods must be overridden by the first concrete (non-abstract) subclass.
- With respect to the method it overrides, the overriding method
- Must have the same argument list.
- Must have the same return type, except that as of Java 5, the return type can be a subclass—this is known as a covariant return.
- Must not have a more restrictive access modifier.
- May have a less restrictive access modifier.
- Must not throw new or broader checked exceptions.
- May throw fewer or narrower checked exceptions, or any unchecked exception.
- final methods cannot be overridden.
- Only inherited methods may be overridden, and remember that private methods are not inherited.
- A subclass uses super.overriddenMethodName() to call the superclass version of an overridden method.
- Overloading means reusing a method name, but with different arguments.
- Overloaded methods
- Must have different argument lists
- May have different return types, if argument lists are also different
- May have different access modifiers
- May throw different exceptions
- Methods from a superclass can be overloaded in a subclass.
- Polymorphism applies to overriding, not to overloading.
- Object type (not the reference variable's type), determines which overridden method is used at runtime.
- Reference type determines which overloaded method will be used at compile time.