java – 方法重写访问修饰符和返回类型限制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 方法重写访问修饰符和返回类型限制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1074字,纯文字阅读大概需要2分钟。
内容图文
![java – 方法重写访问修饰符和返回类型限制](/upload/InfoBanner/zyjiaocheng/794/77012a0c668245f196a741971e5ee3db.jpg)
下面的代码根据方法的规则工作覆盖并显示编译错误与Base.aMethod()不兼容的返回类型
class Base
{
Integer aMethod()
{
return 0;
}
}
public class OverRidingRules extends Base
{
protected Number aMethod()
{
return 0;
}
}
但是,如果我将Base.aMethod的访问修饰符从默认更改为私有,则它会成功编译.有人可以告诉我为什么编译器没有显示相同的错误?
解决方法:
重写方法不能具有比它覆盖的方法更“宽”的返回类型1,这就是你在这里所做的.来自Base的aMethod只能返回一个Integer,因此使用可返回任何Number的内容覆盖它是无效的,例如Floats.这就是您在当前代码中收到编译错误的原因.
现在,当您将Base中的aMethod更改为私有时,在子类中将无法再看到/覆盖它.因此,在这种情况下,OverRidingRules中的aMethod不会覆盖Base中的aMethod,而是一个具有相同名称的独立方法,因此我们不会遇到与上面相同的问题,也不会发生编译错误.
在his comment中@user3580294点也是如此.
1然而,反向是有效的.例如,以下是合法的:
class Base {
Number aMethod() { // notice the return type is `Number`
return 0;
}
}
class OverRidingRules extends Base {
Integer aMethod() { // notice the return type is `Integer`
return 0;
}
}
换句话说,重写方法可以具有比其覆盖的方法“更窄”的返回类型.
内容总结
以上是互联网集市为您收集整理的java – 方法重写访问修饰符和返回类型限制全部内容,希望文章能够帮你解决java – 方法重写访问修饰符和返回类型限制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。