为了账号安全,请及时绑定邮箱和手机立即绑定

java 子类继承父类后,在子类中重复( 不是重写)父类的private方法,所产生的疑问。

java 子类继承父类后,在子类中重复( 不是重写)父类的private方法,所产生的疑问。

青春有我 2019-02-24 21:44:20
对一下代码的输出结果很有疑问。请懂得的人指教。 public class Test { public static void main(String[] args) { new Person().printPerson(); new Student().printPerson(); } } class Student extends Person { private String getInfo() { return "student"; } } class Person { private String getInfo() { return "person"; } public void printPerson() { System.out.println(getInfo()); } } 输出结果是:personperson 为什么会这样?Student的实例调用printPerson()方法,为什么没有输出“student”?
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我自己已经在知道了。
主类中Student的实例,调用printPetson方法是不能调用Student自己的getInfo方法的,因为getInfo方法是私有方法,不能直接调用。

而父类Person的GetInfo方法虽然是私有的,但是通过其公共的printPerson方法可以直接访问。

所以Student的实例调用printPerson方法,会调用与此方法同属一个类的私有getInfo方法。

查看完整回答
反对 回复 2019-03-01
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

嗯 没错 当你student调用时 printperson()时候,jvm 根据invokevirtual 找到了父类的实现。然后调用getinfo时候,此时穿入得this 虽然实际是student 但类型是Person 然后发现是private 直接invokespecial 调用,不用多态了

查看完整回答
反对 回复 2019-03-01
?
慕标5832272

TA贡献1966条经验 获得超4个赞

新手中的新手,自己new两次,而只有父类打印

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 683 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信