The ability to define behaviour that’s specific to a particular subclass type. It means a method is implemented in superclass and subclass has some specific behaviour so subclass is free to implement the same method again. This concept is called as overriding.
Important Points
- Inheritance is required to achieve Overriding.
- Overriding is runtime polymorphism.
The Rules for overriding a method
- Subclass -> overriding method -> must have exactly same argument list.
- Subclass -> overriding method -> must have exactly same return type.
- Subclass -> overriding method -> must not be restrictive than overridden method.
- Subclass -> overriding method -> must not throw newer or broader checked exception.
- Final methods can’t be overridden.
12345678910111213141516171819202122232425262728293031323334353637Section 1.0package technical.jungle.com.overriding;public class Technical {public void display() {System.out.println("TechnicalJungle.com -Technical- >display()");}}Section 2.0package technical.jungle.com.overriding;public class Jungle extends Technical{public void display() {System.out.println("TechnicalJungle.com - Jungle->display()");}public static void main(String[] args) {Technical object1 = new Technical();object1.display();Jungle object2 = new Jungle();object2.display();}}Output:TechnicalJungle.com - Technical->display()TechnicalJungle.com - Jungle->display()Some key points for above demo:
1) Class Jungle is inheriting class Technical. SubClass and SuperClass, both have same method (named display()).
2) Object is getting created for class Technical. So at runtime method display() of class ‘Technical’ is getting called.
Technical object1 = new Technical();object1.display();
2) Object is getting created for class Technical. So at runtime method display() of class ‘Technical’ is getting called.
Technical object1 = new Technical();object1.display();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package technical.jungle.com.overriding; public class JungleTech extends Technical { public void display() { System.out.println("TechnicalJungle.com - JungleTech -> display()"); } public static void main(String[] args) { Technical object1 = new JungleTech(); object1.display(); } } Output: TechnicalJungle.com - JungleTech -> display() |
Some key points for above demo:
- Class ‘JungleTech’ is having ‘display()’ overridden method.
- Check below code:
Technical object1 = new JungleTech();object1.display();—- Left side of object1 is class ‘Technical’, it means ‘Technical’ is super class and it can hold base class object. In this code object is getting created for JungleTech class.—- If super class, left side, does not have display method then ‘object1.display();’ will give compile time error. The reason is at compile it JVM will check whether display method is available in super class (Technical) or not. See the demo below.
1234567891011121314151617181920212223242526272829303132333435363738394041package technical.jungle.com.overriding;public class Technical {/* public void display() {System.out.println("TechnicalJungle.com - Technical->display()");}*/}-----------------------------------------------------package technical.jungle.com.overriding;public class Jungle extends Technical{public void display() {System.out.println("TechnicalJungle.com - Jungle->display()");}public static void main(String[] args) {Technical object1 = new Technical();object1.display();Jungle object2 = new Jungle();object2.display();}}-----------------------------------------------------package technical.jungle.com.overriding;public class JungleTech extends Technical {public void display() {System.out.println("TechnicalJungle.com - JungleTech -> display()");}public static void main(String[] args) {Technical object1 = new JungleTech();object1.display();}}-----------------------------------------------------This will give compile time error. Because at compile time JVM will check, whether class ‘Technical’ is holding display() method or not.Final methods can’t be overridden
12345678910111213141516171819202122232425package technical.jungle.com.overriding;public class Technical {final public void display() {System.out.println("TechnicalJungle.com - Technical->display()");}}---------------------------------------------------------------------------------------------------package technical.jungle.com.overriding;public class JungleTech extends Technical {public void display() {System.out.println("TechnicalJungle.com - JungleTech -> display()");}public static void main(String[] args) {Technical object1 = new JungleTech();object1.display();}}---------------------------------------------------------------------------------------------------Super class has final method. So it’s can’t be overridden.Subclass -> overriding method -> must not be restrictive than overridden method.
12345678910111213141516171819202122232425----------------------------------------------------------------------------------------------------package technical.jungle.com.overriding;public class Technical {public void display() {System.out.println("TechnicalJungle.com - Technical->display()");}}----------------------------------------------------------------------------------------------------package technical.jungle.com.overriding;public class JungleTech extends Technical {private void display() {System.out.println("TechnicalJungle.com - JungleTech -> display()");}public static void main(String[] args) {Technical object1 = new JungleTech();object1.display();}}----------------------------------------------------------------------------------------------------Subclass -> overriding method -> must not be restrictive than overridden method.