java - Why doesn't the compiler complain when I try to override a
static method?
itemprop="text">
I know that we cannot override static
methods in Java, but can someone explain the following
code?
class A {
public
static void a() {
System.out.println("A.a()");
}
}
class B extends A {
public static void a() {
System.out.println("B.a()");
}
}
How was
I able to override method a()
in class
B
?
itemprop="text">
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: href="https://stackoverflow.com/questions/2223386/why-doesnt-java-allow-overriding-of-static-methods">Why
doesn't Java allow overriding of static methods?
No comments:
Post a Comment