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

本文深入探讨Java中继承机制下方法的查找与执行过程,分析子类如何覆盖父类方法,以及不同访问权限对方法调用的影响。通过具体实例,解析在不同情况下的执行结果,帮助理解Java方法覆盖与调用的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行结果: 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()函数

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值