Hi All ,
In previous post we checked how various methods works in overriding. Now in this post we will take a look how static method works in overriding concept.
public class InheritanceDemo1 {
public static void main(String [] args){
Child child = new Child();
child.m1();
}
}
class Parent {
public static void m1(){
System.out.println("This is parent class m1 method");
}
}
class Child extends Parent {
public void m1(){
System.out.println("This is child class m1 method");
}
}
public class InheritanceDemo1 {
public static void main(String [] args){
Child child = new Child();
child.m1();
}
}
class Parent {
public void m1(){
System.out.println("This is parent class m1 method");
}
}
class Child extends Parent {
public static void m1(){
System.out.println("This is child class m1 method");
}
}
public class InheritanceDemo1 {
public static void main(String [] args){
Parent parent1 = new Child();
parent1.m1();
Parent parent2 = new SubChild();
parent2.m1();
}
}
class Parent {
public static void m1(){
System.out.println("This is parent class m1 method");
}
}
class Child extends Parent {
public static void m1(){
System.out.println("This is child class m1 method");
}
}
class SubChild extends Parent {
public static void m1(){
System.out.println("This is sub child class m1 method");
}
}
In previous post we checked how various methods works in overriding. Now in this post we will take a look how static method works in overriding concept.
Case I :
Let's take a look:
public static void main(String [] args){
Child child = new Child();
child.m1();
}
}
class Parent {
public static void m1(){
System.out.println("This is parent class m1 method");
}
}
class Child extends Parent {
public void m1(){
System.out.println("This is child class m1 method");
}
}
Output :
error: m1() in Child cannot override m1() in Parent
overridden method is static
Explanation:
In this example we can see that we can't override a static method as non-static , otherwise we will get compile time error.
Case II :
Same previous case , we are going to check , with overriding the non-static method from Parent to static Child class method .Let's take a look:
public static void main(String [] args){
Child child = new Child();
child.m1();
}
}
class Parent {
public void m1(){
System.out.println("This is parent class m1 method");
}
}
class Child extends Parent {
public static void m1(){
System.out.println("This is child class m1 method");
}
}
Output :
error: m1() in Child cannot override m1() in Parent
overriding method is static
Explanation:
In this example we can see that we can't override a non-static method as static , otherwise we will get compile time error.
Case III :
Now in this case we will check if both parent and child class methods are static then , we won't get any compile time error . It seems overriding concept applicable for static methods ,but it is not overriding and it is Method Hiding .Let's take a look:
public static void main(String [] args){
Parent parent1 = new Child();
parent1.m1();
Parent parent2 = new SubChild();
parent2.m1();
}
}
class Parent {
public static void m1(){
System.out.println("This is parent class m1 method");
}
}
class Child extends Parent {
public static void m1(){
System.out.println("This is child class m1 method");
}
}
class SubChild extends Parent {
public static void m1(){
System.out.println("This is sub child class m1 method");
}
}
Output :
This is parent class m1 method
This is parent class m1 method
This is parent class m1 method
Explanation:
In this example we can see that it is method hiding , method resolution is always takes care by compiler based on reference type.
Hidden methods are in Static context, I believe. Static methods are not overridden, because the resolution of method calls done by the compiler at the compile time itself. So, if you define a static method in the base class with the same signature as that one present in the parent class, then the method in the subclass hides the method inherited from super class.
If both Parent and Child class methods are non-static , then it will become overriding .In that case output will be :
Output :
This is child class m1 method
This is sub child class m1 method
This is sub child class m1 method
No comments:
Post a Comment