You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java子类扩展为何调用父类私有方法?代码示例答疑

为什么这段Java代码输出"Bird is flying"?

先来看这段代码:

public abstract class Bird { 
    private void fly() { 
        System.out.println("Bird is flying"); 
    } 
    public static void main(String[] args) { 
        Bird bird = new Pelican(); 
        bird.fly(); 
    } 
} 
class Pelican extends Bird { 
    protected void fly() { 
        System.out.println("Pelican is flying"); 
    } 
}

咱们来一步步拆解背后的逻辑:

  • 私有方法不会被继承:父类Bird里的fly()是private修饰的,在Java规则里,私有成员完全属于定义它的类,子类Pelican根本继承不到这个方法。所以Pelican里的fly()是一个全新的方法,和父类的fly()没有任何重写关系。
  • 私有方法是静态绑定的:Java对私有方法、静态方法、final方法这类特殊方法,会在编译阶段就确定要调用的方法,而非运行时根据对象实际类型动态绑定。哪怕你用父类引用指向子类对象(Bird bird = new Pelican()),调用bird.fly()的时候,编译期就已经锁定了父类Bird的私有fly()方法,和子类Pelican的fly()完全无关。

所以运行这段代码时,最终执行的是Bird类里的私有fly()方法,输出Bird is flying。

内容的提问来源于stack exchange,提问作者Ivan Karotki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:13:20