cannot reduce the visibility of the inherited method from xxx原因及解决方法

2021/9/7 23:37:47

本文主要是介绍cannot reduce the visibility of the inherited method from xxx原因及解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

cannot reduce the visibility of the inherited method from xxx
意思为:无法降低从xxx继承的方法的可见性
解决这个问题,我们先需要明白对于类和接口中的一个必须知道的知识点:
1、子类重写父类方法时,不能使用比父类中被重写的方法更低的访问权限,如父类中的方法是public时,子类的方法就不能是prvate,但是如果父类是默认的,那么你补上一个public就一定没问题。

2、因为接口定义的方法默认是public的,意思就是你没有任何访问修饰符的情况下,系统给接口的方法加上了一个public的访问修饰符,而public的访问权限非常高。

3、类的默认访问修饰符是freidnly,访问级别比public低,因此和上述2结合之后,如果要重写接口的抽象方法,就必须在重写的方法前补上一个public

错误原因:类继承接口,在重写接口方法时,没有用public定义

情况如下:
生物类:
在这里插入图片描述
动物类:
在这里插入图片描述
人类:在这里插入图片描述
最终实例:
在这里插入图片描述
可以发现没有加上public的think(方法出现了这个问题,而加上public的其他方法都没有出现这个问题,只需要补上一个public就能解决,这是由于默认接口Human他的抽象方法的访问权限都是public,那么我们的访问权限就不能低于public。
当然,这是由于我的接口继承的是Human,如果继承其他两个接口,那么可以不对父接口中不存在的方法进行权限减小,如下:
在这里插入图片描述
可以发现如果将父接口设置为动物类,由于动物类没有earn()和think()这两个方法,因此我在Person类中声明的这两个方法其实就是他自己的方法,与Human类无关。
正确使用情况如下
在这里插入图片描述



这篇关于cannot reduce the visibility of the inherited method from xxx原因及解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程