In Java, if the name of a derived class static function is the same as a base class static function then the base class static function shadows (or conceals) the derived class static function. For example, the following Java code prints “A.fun()”
Note: Static method is a class property, so if a static method is called from a class name or object having a class container then the method of that class is called not the object’s method.
// file name: Main.java // Parent class class A {
static void fun() { System.out.println( "A.fun()" ); }
} // B is inheriting A // Child class class B extends A {
static void fun() { System.out.println( "B.fun()" ); }
} // Driver Method public class Main {
public static void main(String args[])
{
A a = new B();
a.fun(); // prints A.fun();
// B a = new B();
// a.fun(); // prints B.fun()
// the variable type decides the method
// being invoked, not the assigned object type
}
} |
A.fun()
Note: If we make both A.fun() and B.fun() as non-static then the above program would print “B.fun()”. While both methods are static types, the variable type decides the method being invoked, not the assigned object type