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

子类对象调用父类私有方法问题:访问修饰符为何影响方法调用?

为什么父类方法的访问修饰符会影响方法调用逻辑?

这其实是Java里方法重写和访问控制结合的核心知识点,咱们一步步把它讲透:

1. 私有方法的本质:无法被重写,完全隐藏

当父类的getBankName()是private修饰时,这个方法是父类的私有成员——它对子类完全不可见,子类根本没法“重写”它。你在子类里写的public void getBankName(),本质上是一个和父类方法同名但毫无关系的全新方法,两者不存在重写关联。

这时候看代码里的调用逻辑:

Bank bank = new MyBank(); 
bank.getBankName();

编译器在编译阶段,只会检查引用类型(Bank)里有没有getBankName()方法——因为父类的私有方法在编译时就被绑定到了父类自身,不会触发Java的动态绑定机制。所以运行时,不管实际对象是MyBank还是啥,都会调用父类的私有getBankName(),输出"Bank"。

2. 改为public后:触发动态绑定的方法重写

当父类方法改成public后,它就满足了方法重写的前提:

  • 子类方法和父类方法签名完全一致
  • 子类方法的访问修饰符(public)比父类的(public)更宽松或相同

这时候,子类的getBankName()就是真正的重写方法了。Java的动态绑定机制会在运行时生效:它会根据实际创建的对象类型(MyBank),去调用子类重写后的方法,所以输出"MyBank"。

一个快速验证小技巧

你可以试试在子类的getBankName()上加上@Override注解:

  • 如果父类方法是private,编译器会直接报错,说明这不是合法的重写;
  • 改成public后,注解会被正常识别,证明这是标准的方法重写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:22:59