C/C++教程

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

本文主要是介绍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原因及解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!