You didn't override anything here. To see for yourself, Try putting @Override
annotation before public static void a()
in class B
and Java will throw an error.
You just defined a function in class B
called a()
, which is distinct (no relation whatsoever) from the function a()
in class A
.
But Because B.a()
has the same name as a function in the parent class, it hides A.a()
[As pointed by Eng. Fouad]. At runtime, the compiler uses the actual class of the declared reference to determine which method to run. For example,
B b = new B();
b.a() //prints B.a()
A a = (A)b;
a.a() //print A.a(). Uses the declared reference's class to find the method.
You cannot override static methods in Java. Remember static
methods and fields are associated with the class, not with the objects. (Although, in some languages like Smalltalk, this is possible).
I found some good answers here: Why doesn't Java allow overriding of static methods?
That's called hiding a method
, as stated in the Java tutorial Overriding and Hiding Methods:
If a subclass defines a class method with the same signature as a class method in the superclass, the method in the subclass hides the one in the superclass.
static
methods are not inherited so its B
's separate copy of method
static
are related to class
not the state of Object
You didn't override the method a()
, because static
methods are not inherited. If you had put @Override
, you would have seen an error.
A.java:10: error: method does not override or implement a method from a supertype
@Override
^
1 error
But that doesn't stop you from defining static methods with the same signature in both classes.
Also, the choice of method to call depends on the declared type of the variable.
B b = null;
b.a(); // (1) prints B.a()
A a = new B();
a.a(); // (2) prints a.a()
At (1), if the system cared about the identity of b
, it would throw a NPE
. and at (2), the value of a
is ignored. Since a
is declared as an A
, A.a()
is called.
Your method is not overridden method. you just try to put @Override annotation before your method in derived class. it will give you a compile time error. so java will not allow you to override static method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With