java阻止类和方法重写_java – 方法重写访问修饰符和返回类型限制

下面的代码根据方法的规则工作覆盖并显示编译错误与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,而是一个具有相同名称的独立方法,因此我们不会遇到与上面相同的问题,也不会发生编译错误.

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,access-modifiers,method-overriding

来源: https://codeday.me/bug/20190624/1278489.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值