`
eriol
  • 浏览: 402256 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java中的override问题

    博客分类:
  • Java
阅读更多

有这样一个例子:

 

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

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

 

输出结果为private f()

解答:如果基类中的f方法不是private,那么 po.f();应该调用的是子类的f方法;
但是如果基类的f方法为private,那么该方法对于子类来说是不可见的,所以子类的f方法并不是重写了基类的f方法,而是另一个f方法,只不过和基类的 f名字相同,因为他不知道基类有f方法,所以基类也不知道子类有f方法,所以在 po.f();时,就会认为子类没有f方法,所以就调用的基类的f方法。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics