java继承与继承中子类覆写父类方法的注意事项

运行结果: lixinghua

原因:main函数里面,new Student()访问的fun()函数在子类中找不到,则从父类Person中查找;父类中的fun()函数调用当前类的print()函数,所以继续查找父类的print()函数,发现该函数访问权限为private,即不能被子类所继承或覆写,所以最终执行父类的print()函数

执行结果:nanjinqin

原因:main函数里面,new Student()访问的fun()函数在子类中找不到,则从父类Person中查找;父类中的fun()函数调用当前类的print()函数,所以继续查找父类的print()函数,发现该函数访问权限为默认default,即可以被子类所继承或覆写,再去子类找是否有覆写的print()函数,有,则执行子类覆写后的print()函数

 执行结果:nanjinqin

原因:main函数里面,new Student()访问print(),即在子类中找到print()方法并执行

 执行结果:Exception in thread "main" java.lang.StackOverflowError

原因:main函数里面,new Student()访问print(),即在子类中找到print()方法并执行,执行过程中调用fun()函数,再在当前类(即子类)中找fun()函数,当前类不存在则去父类中寻找并执行fun()函数,父类fun()函数调用当前类(即父类)的print()函数,由于父类的print()函数被子类覆写,于是执行子类覆写后的print()函数,造成对象之间相互引用,最终会导致栈溢出;如果将父类print()函数的public权限修改为private,则直接执行父类print()函数,输出结果为lixinghua

执行结果:lixinghua

原因:main函数里面,new Student()访问子类的print()函数,其中调用了父类的fun()函数并执行结果

执行结果 :nanjinqin

原因:main函数里面,new Student()访问子类的print()函数,其中调用父类的fun()函数,fun函数调用当前类(即父类)的study函数,而study()函数被子类覆写过,所以最终执行子类的study()函数

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值