Java中的override问题

有这样一个例子:

 

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方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值