Overriding concepts in Java technology (to the best of my understanding/knowledge):
Add your suggestions here
1. Overriding occurs if a class A extends class B and class A and B has same method defined/implemented. like: class A { public void print() { System.out.println("inside A print"); } } class B extends A { public void print() { System.out.println("inside B print"); } } 2. Access privileges of child class B should be same or stronger than that of the parent class A. in this example, 2.1 Access privileges of print method in both the child (B) is same as parent (A), so it is allowed. Compilation OK Runtime OK 2.2 Access privileges of print method in A is 'public' and in B it is 'protected/private', it is not allowed. class A { public void print() { System.out.println("inside A print"); } } class B extends A { protected void print() { System.out.println("inside B print"); } } Compilation ERROR No Runtime class A { public void print() { System.out.println("inside A print"); } } class B extends A { private void print() { System.out.println("inside B print"); } } Compilation ERROR No Runtime
    Third party Advertisement
3. If the overridden method (in this example, it is method 'print') throws Exception in parent class, then the child class method (overridden) method should either throw an exception that is sub class of the parent exception class, or no throws clause in child class overridden method. 3.1. class A { public void print() throws Exception { System.out.println("inside A print"); } } class B extends A { public void print() throws java.io.IOException { System.out.println("inside B print"); } } Compilation OK Runtime OK 3.2. class A { public void print() throws Exception { System.out.println("inside A print"); } } class B extends A { public void print() { System.out.println("inside B print"); } } Compilation OK Runtime OK 3.3. class A { public void print() throws java.io.Exception { System.out.println("inside A print"); } } class B extends A { public void print() throws java.lang.Exception { System.out.println("inside B print"); } } Compilation ERROR 3.4. class A { public void print() { System.out.println("inside A print"); } } class B extends A { public void print() throws java.lang.Exception { System.out.println("inside B print"); } } Compilation ERROR 4. If the parent class method is declared final, then compilation error. As final keyword restricts overriding. 4.1. class A { public final void print() { System.out.println("inside A print"); } } class B extends A { public void print() { System.out.println("inside B print"); } } Compilation ERROR
    Third party Advertisement
5. In case of instance variables, be it primitive type (int, float,...) or wrapper class (Integer, String, Date, ...), when present in parent class A, and in child class B, it is not overriding. 5.1. class A { int i=10; public void print() { System.out.println("inside A print"); } } class B extends A { int i=5; public void print() { System.out.println("inside B print"); } } Compilation OK In the client code, in case of the following lines of code: A a = new B(); System.out.println(a.i); prints on the console as : 10 And a.print(); prints on the console as : inside B print 6. If super class is not having a default constructor, as shown below, then there is compilation error. class A { public A(String test) { System.out.println("Constructor A"); } public void print() { System.out.println("inside A print"); } } class B extends A { public B() { System.out.println("Constructor B"); } public void print() { System.out.println("inside B print"); } } Compilation ERROR Add your suggestions here