/*
* 2018年3月22日18:52:46
* 代码的目的:
* 说明“覆盖”私有方法的缺陷。
* 在代码执行的结果中,我们期望能够输出public f(),但输出的是
* private f(),
* 这是因为private void f(),是private的,会被编译器自动认为是final方法,
* 而且对导出类是屏蔽的。所以导出类定义的f()既不是重载也不是重写,仅是
* 定义了一个新的函数,
*
* */
//: polymorphism/PrivateOverride.java
// Trying to override a private method.
package polymorphism;
import static net.mindview.util.Print.*;
public class PrivateOverride {
private void f() { print("private f()"); }
public static void main(String[] args) {
PrivateOverride po = new Derived();
//因为po对象仍在PrivateOverride类体内,因此可以看到这个名字。
//所以并未发生多态行为。
po.f();
}
}
class Derived extends PrivateOverride {
public void f() { print("public f()"); }
} /* Output:
private f()
===========
结论就是:只有非private方法才可以被覆盖,但还是要注意密切注意覆盖private
方法的现象,不会按照我们的期望执行。
*///:~