- Can You Override Static Method in Java? Method Hiding Example
- Overriding Static method in Java — Example
- Can You Overload or Override Static methods in Java? Example
- Can Static Method be overridden in Java — See yourself
- Can We Override Static Method in Java?
- Some Terminologies
- Example to Prove that Static Methods Cannot Be Overriden
- Important Points for Method Overriding and Static Methods in Java
- Conclusion
Can You Override Static Method in Java? Method Hiding Example
This is one of the most popular Java interview questions. The answer to this question is No, you cannot override the static method in Java because the method overriding is based upon dynamic binding at runtime and static methods are bonded using static binding at compile time. This means static methods are resolved even before objects are created, that’s why it’s not possible to override static methods in Java. Though you can declare a method with the same name and method signature in the subclass which does look like you can override static methods in Java but in reality that is method hiding.
Method overriding is an object-oriented concept that is based upon method resolution at runtime depending upon which object is calling the method rather than which class variable is holding the reference.
Java won’t resolve the static method call at runtime and depending upon the type of object which is used to call static methods, the corresponding method will be called. It means if you use Parent class’s type to call a static method, original static will be called from a patent class, on the other hand, if you use Child class’s type to call static methods, the method from child class will be called.
In short, you can not override the static method in Java. If you use Java IDE like Eclipse or Netbeans, they will show a warning that the static method should be called using class name and not by using object because a static method can not be overridden in Java.
And, if you are new to Java and Object-Oriented Programming then I highly recommend you to go through a comprehensive Java course like The Complete Java Programming Masterclass by Tim Buchalaka and his team on Udemy to learn in a more structured way. This is one of the most up-to-date and comprehensive courses and also very affordable, you can buy it for just $9.9 on Udemy sales.
Overriding Static method in Java — Example
In the last section, you learn the theory that we can not override static methods in Java, the static method can only be hidden in sub-class. Also, don’t get confused between overloading and overriding as you can overload a static method in Java but you cannot override it.
/**
*
* Java program which demonstrates that
* you can not override static methods in Java.
* Had Static method can be overridden,
* with Superclass type and subclass object
* static method from subclass would be called in our example,
* this is not the case.
*
* @author Javin Paul
*/
public class CanWeOverrideStaticMethod
public static void main ( String args [])
Screen scrn = new ColorScreen () ;
//if we can override the static method in Java then
//IDE like Eclipse or IDEA will show a warning,
//the static method should be called from the class name
/*
* public static method which can not be overridden in Java
*/
public static void show () <
System. out . printf ( «The static method from parent class» ) ;
>
>
class ColorScreen extends Screen <
/*
* static method of the same name and method signature
* as existed in super
* class, this is not method overriding instead this is called
* method hiding in Java
*/
public static void show () <
System. err . println ( «Overridden static method
in Child Class in Java» ) ;
>
>
Output:
The static method from the parent class
This output confirms that you can not override the static method in Java and the static method is bonded on compile-time, based upon type or class information and not based upon Object. That’s why static methods are also called «class methods» because they belong to the class.
Had the Static method been overridden, the method from the Child class of ColorScreen would have been called, which wasn’t the case here.
That’s all on discussion Can we override the static method in Java or not. We have confirmed that no, you can not override a static method, we can only hide the static method in Java. Creating a static method with the same name and method signature is called Method hiding in Java.
Thanks for reading this article so far. If you like an object-oriented programming tutorial then please share it with your friends and colleagues. If you have any questions or feedback then please drop a note.
P. S. — If you are serious about learning object-oriented programming and looking for a free online course to start with then you can also check this FREE Object Oriented Programming (OOPs) for the JAVA Interviews course on Udemy. It’s completely free and you just need a free Udemy account to join this course.
Can You Overload or Override Static methods in Java? Example
Can a static method be overridden in Java, or can you override and overload static method in Java, is a common Java interview questions mostly asked to 2 years experienced Java programmers. The answer is, No, you can not override static method in Java, though you can declare a method with the same signature in a subclass. It won’t be overridden in the exact sense, instead, that is called method hiding. But at the same time, you can overload static methods in Java, there is nothing wrong with declaring static methods with the same name, but different arguments. Some time interviewer also ask, Why you can not override static methods in Java? The answer to this question lies in the time of resolution.
As I said in the difference between static and dynamic binding, static methods are bonded during compile time using Type of reference variable, and not Object. If you have using IDE like Netbeans and Eclipse, and If you try to access static methods using an object, you will see warnings. As per Java coding convention, static methods should be accessed by class name rather than an object.
In short, a static method can be overloaded, but can not be overridden in Java. If you declare, another static method with same signature in derived class than the static method of superclass will be hidden, and any call to that static method in subclass will go to static method declared in that class itself. This is known as method hiding in Java.
Can Static Method be overridden in Java — See yourself
Let’s see an example of trying to override a static method. In this Java The program, we have two classes Parent and Child , both have name() method which is static .
Now, As per rules of method overriding, if a method is overridden than a call is resolved by the type of object during runtime. This means, in our test class StaticOverrideTest , p.name() in the second the example should call Child class’ name() method because the reference variable of type Parent is referring an object of Child , but instead, it call name() method of Parent class itself.
This happens, because static methods are resolved or bonded during compile time, and only information that is available, and used by the compiler is a type of reference variable. Since p was a reference variable of the Parent type, the name() method from the Parent class was called. Now, In order to prove that static method can be hidden, if we call Child.name() or c.name() , it will call name() method from Child class.
This means static methods can not be overridden in Java, they can only be hidden. This also answers, Why the static method can not be overridden in Java, because they are resolved during compile time. By the way, this example doesn’t show, whether you can overload static method or not, but you can. See this tutorial, for an example of an overloading static method in Java.
/** * Java Program to show that, you can not override static method in Java. * If you declare same method in subclass then, It's known as method hiding. * * @author Javin Paul */ public class StaticOverrideTest < public static void main(String args[]) < Parent p = new Parent(); p.name(); // should call static method from super class (Parent) // because type of reference variable // p is Parent p = new Child(); p.name(); // as per overriding rules this should call to child's static // overridden method. Since static method can not be overridden // , it will call parent static method // because Type of p is Parent. Child c = new Child(); c.name(); // will call child static method because static method // get called by type of Class > > class Parent< /* * original static method in super class which will be hidden * in subclass. */ public static void name()< System.out.println("static method from Parent"); > > class Child extends Parent< /* * Static method with same signature as in super class, * Since static method can not be overridden, this is called * method hiding. Now, if you call Child.name(), this method * will be called, also any call to name() in this particular * class will go to this method, because super class method is hidden. */ public static void name()< System.out.println("static method from Child"); > > Output static method from Parent static method from Parent static method from Child
That’s all on this Java interview question guys. Remember, Static methods can not be overridden in Java, but they can be overloaded and hidden in Java. We have also touched based on What is method hiding in Java, and learned Why Static method can not be overridden in Java, since they are bonded during compile time by using a type of Class, and not at runtime using Objects.
Can We Override Static Method in Java?
NO, we can’t override static methods since method overriding relies on dynamic binding at runtime, but static methods are bonded at compile time with static binding. As a result, we are unable to override static methods.
If we try to override the static method in the child class then the child’s class method will get hidden and the parent’s class method will be called based on the object reference.
Some Terminologies
- Static Method Also known as class level method and it is declared using a static keyword, its copy is shared by all the objects of a class.
Example to Prove that Static Methods Cannot Be Overriden
If static methods are redefined by a derived class, then it is not method overriding but method hiding.
Explanation:
- In the above code, there are three classes namely Base , Derived , and Driver .
- In the Base and Derived classes there are two methods add() (non-static) and print() (static).
- Since add() is a non-static method it will be overridden in the child class but the print() method is static and hence it will be not.
- So when we make an object of the Base class in the Driver class and make it refer to the child class Derived , then due to overriding rules add() method of child class is called.
- Since print() is a static method it didn’t get override due to which Base class print() is called.
Important Points for Method Overriding and Static Methods in Java
- For static methods, the method is called based on the type of reference, not the object being referred to, implying that the method call is determined at compile time.
- For non-static methods, the method is called based on the type of object being referenced, rather than the type of reference, implying that method calls are made at runtime.
- A static method cannot hide an instance method, and an instance method cannot override it. The following program illustrates this.
Explanation:
- In the above code, there are three classes namely Base , Derived , and Driver . In the Base class, there are two methods add() (non-static) and print() (static).
- In the Derived class there are two methods, add() which we have tried to make static but it causes compilation error because a static method cannot hide an instance method add() of the Base class.
- The print() method which is an instance method tries to override print() method of Base class which is static causes another compilation error because an instance method cannot override a static method.
- We can overload the methods inherited from the superclass in a subclass (or Derived Class). These overloaded methods don’t hide or override the superclass methods; they’re new, subclass-specific methods as they have a different signature.
Conclusion
- Static methods cannot be overridden since they are bonded at compile time and method overriding relies on dynamic binding at runtime.
- If static methods are redefined by a derived class, then it is not Method Overriding but Method Hiding.
- Static method cannot hide an instance method, and an instance method cannot override a static method.