覆盖私有方法的缺陷

Posted 衣带渐宽终不悔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了覆盖私有方法的缺陷相关的知识,希望对你有一定的参考价值。

在学习多态的时候,发现一个问题:父类引用指向子类对象的时候,该引用可以调用父类中的私有方法:

package music;

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()"); }
} 

最后的打印结果是:

private f()

 无法理解这是怎么回事,不是说好的动态绑定的么,如果在运行的时候发现调用父类私有方法的是指向子类对象的父类引用,该方法应该是不能被调用的啊

  

以上是关于覆盖私有方法的缺陷的主要内容,如果未能解决你的问题,请参考以下文章

覆盖(非)静态类中的私有方法

你可以使用 Groovy 元编程来覆盖 Java 类的私有方法吗

如何管理在每个 git 版本中添加私有代码片段?

覆盖Java中的私有方法

如何覆盖私有方法并快速调用超级?

派生类中的抽象方法覆盖,如何使私有