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