Overriding and overloading are common concepts of Java and occur often on SCJP exam. Although I know the rules that apply for them, I happen to think twice (or more) on questions dealing with them. Thus, it’s a good idea to keep the following rules in mind…
Overriding
- applies ONLY to inherited methods
- is related to polymorphism
- object type (NOT reference variable type) determines which overriden method will be used at runtime
- overriding method MUST have the same argument list (if not, it might be a case of overloading)
- overriding method MUST have the same return type; the exception is covariant return (used as of Java 5) which returns a type that is a subclass of what is returned by the overriden method
- overriding method MUST NOT have more restrictive access modifier, but MAY have less restrictive one
- overriding method MUST NOT throw new or broader checked exceptions, but MAY throw fewer or narrower checked exceptions or any unchecked exceptions
- abstract methods MUST be overridden
- final methods CANNOT be overridden
- static methods CANNOT be overridden
- constructors CANNOT be overridden
Overloading
- overloading can take place in the same class or in the subclass
- overloaded methods MUST have a different argument list
- overloaded methods MAY change the return type (in case argument list is different)
- overloaded methods MAY change the access modifier
- overloaded methods MAY throw new or broader checked excpetions
- reference type determines which overloaded method will be used at compile time
- constructors MAY be overloaded
- methods adjustment in connection with overloaded method’s arguments:
- you cannot widen and then box (int -> Long)
- you can box and then widen (int -> Object, via Integer)
- you can combine var args with either widening (byte -> int) or boxing (int -> Integer):
- widening is over boxing
- widening is over var args
- boxing is over var args
Finally, a few notes on polymorphism:
- a refenrence variable is of an unchangeable type, but can refer to a subtype object
- a single object can be referred to by reference variable of many differnet types (however, they MUST be the of same type or supertype of the object)
- reference type determines which method will be called
Also, keep that in mind:
Reference type determines which overloaded method is used at compile time.
Object type determines which overriden method is used at runtime.









Vert helpful, thank you.
helpfull.thanks a lot
Always good to read about boxing.
Can I ask though - how did you get this picked up and into google news?
Very impressive, is it something that is just up to Google or you actively created?
Obviously this is a popular blog with great data so well done on your seo success..
I’m very happy that anybody reads all that
kung-fu-dummies, what do you mean by saying this site was picked up by google news? Did you mean it was high in the result list or something else?
Cheers,
Jarek
Really very useful..for the students of our college..Thanks
Realy very helpful……. thank you
Respected Sir,
Thanks for given detail information about overloading and overriding which i required.
Thanks & Regards
Suhas