我对此代码有两个问题

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()
*/// :~

1)函数f在Override po的引用上如何可见;

2)为什么输出“private f()”

最佳答案

  • main方法位于Override类内部,因此当然可以看到Override类的私有(private)成员。
  • 您是而不是覆盖方法f中的Derived,没有多态性。变量po的类型为Override,因此它将从类f中采用方法Override

  • 请注意,类f中的Override方法在Derived类中根本不可见。类f中的Derived方法是另一种方法,它与父类(super class)中的f方法无关。

    关于java - 令人困惑的 “override a private method”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1346208/

    10-16 23:00