向上转型,重写基类函数,访问权限,循环依赖---图片为什么上传不了??

1.重写基类函数时,子类方法的访问权限不能比父类方法窄,即父类是protected子类不能是包访问,单可以是public

 

2.向上转型后的访问权限变化

如图:如果基类和派生类的重写方法权限不一致,也可能引起问题

如下图:因为基类aa是包权限,派生类也有aa,基类和派生类不在同一个包,向上转型的时候,看注解可得派生类的aa()就不是基类aa()的重写方法了---由于对于派生类对象是不继承基类aa()方法的,是看不见基类方法的【当然派生类初始化的时包含的基类块也是有这个基类aa方法的,但是这个基类aa方法只能如果基类其他public方法中调用到了这个方法,才会引用,或者还有一种情况---等下面讨论】

 

如图:aa是包访问权限


如图aa基类是包访问权限,所以派生类aa不是基类aa的重写,不受任何限制

 

如图aa基类是包访问权限,所以派生类aa不是基类aa的重写,不受任何限制


如图aa基类是包访问权限,所以向上转型后访问不了基类的aa

 

 

 

 

此时,如果把基类的包访问权限换成public,我们再看看

如图,就是重写了,就受到不能缩小访问权限的限制了

 

 

再探讨下:

如果向上转型的代码 zhuangxing1 gsh1 = new zhuangxing2()在和zhuanxing1的同一个包里的时候:

此时就会造成循环依赖,所以根本没用这个问题。【因为要在test1中使用zhuangxing1 gsh1 = new zhuangxing2(),必须要在test1中import

 test2,同时由于zhuangxing2是zhuanxing1的extend,所以必须在test2中import test1 导致了循环依赖

所以基本不可能出现。一个函数aa被继承的重写了,然后向上转型后这个函数由于看不到继承的重写的函数而只能用自己的函数这种情况。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值