混淆"覆盖私有方法"

Rah*_*arg 13 java overriding private

我对这段代码有两个问题

public class Override {
    private void f() {
        System.out.println("private f()");
    }
    public static void main(String[] args) {
        Override po = new Derived();
        po.f();
    }
}

class Derived extends Override {
    public void f() {
        System.out.println("public f()");
    }
} 

/*
* Output: private f()
*/// :~
Run Code Online (Sandbox Code Playgroud)

1)如何在Override po的引用上看到函数f;

2)为什么输出"private f()"

Jes*_*per 24

  1. main方法在类内部Override,因此它可以看到类的私有成员Override.

  2. 没有f在课堂上重写方法,Derived没有多态性.变量的类型poOverride,因此它将f从类中获取方法Override.

请注意,f类中的方法在类中Override根本不可见Derived.该方法f在课堂上Derived是一种不同的方法,不具有任何与该方法f在超类.

  • 在您的代码中没有任何地方调用超类的私有方法.当你调用po.f()时,会调用Override的f,因为po的编译时类型是Override.由于没有覆盖,因此没有动态绑定(没有多态) - Java在运行时不查看类型. (3认同)