java 继承 重载_java – 使用继承的重载方法

My question is, why isn’t ClassB’s method being used?

不对。使用的方法是ClassB的方法,它从ClassA继承。

我认为这里的混乱背后的主要原因是该方法实际上不会被覆盖,而是重载。虽然Integer是Number的子类型,但由于Java参数是不变的,所以方法public void method(Integer d)不会覆盖方法public void method(Number n)。所以ClassB最终有两个(重载)方法。

静态绑定用于重载方法,编译器选择具有最具体参数类型的方法。但是在这种情况下,为什么编译器会选择public void method(Number n)而不是public void method(Integer d)。这是因为您用于调用该方法的引用类型为ClassA。

ClassA a = new ClassB(); //instance is of ClassB (runtime info)

a.method(3); //but the reference of type ClassA (compiletime info)

ClassA的唯一方法是public void method(Number n),所以这就是编译器选择的方法。请记住,这里,期望的参数类型是Number,但实际的参数,传递的整数3是自动包装的类型为整数。并且它的工作原因是因为方法参数在Java中是协变的。

现在,我想很清楚为什么它打印

ClassA: 3 class java.lang.Integer

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值