Error example
// polymorphism/PrivateOverride.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Trying to override a private method
// {java polymorphism.PrivateOverride}
package polymorphism;
public class PrivateOverride {
private void f() {
System.out.println("private f()");
}
public static void main(String[] args) {
PrivateOverride po = new Derived();
po.f();
}
}
class Derived extends PrivateOverride {
public void f() {
System.out.println("public f()");
}
}
/* Output:
private f()
*/
You might reasonably expect the output to be "public f()", but a private method is automatically final , and is also hidden from the derived class. So Derived's f() here is a brand new method; it’s not even overloaded, since the base-class version of f() isn’t visible in Derived .
The result of this is that only non- private methods can be overridden, but watch out for the appearance of overriding private methods, which generates no compiler warnings, but doesn’t do what you might expect.
Use the @Override annotation to detect the problem.
The error compiler message is :
polymorphism/PrivateOverride2.java:21: error: method does not override or implement a method from a supertype
@Override
^
1 error
references:
1. On Java 8 - Bruce Eckel
2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/polymorphism/PrivateOverride.java
3. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/polymorphism/PrivateOverride2.java