java试题

题目

     下列程序会输出什么结果:(E)

 
class Super {
  public int getLength() {
return 4;
}
}
 
public class Sub extends Super { 
public long getLength() {
return 5;
}
 
public static void main (String[]args) {
Super super = new Super (); 
Super sub = new Sub(); 
System.out.printIn(super.getLength()+ “,” + sub.getLength() };
}
}
A. 4, 4
B. 4, 5
C. 5, 4
D. 5, 5
E. 代码不能被编译

运行结果:

The return type is incompatible with Super.getLength()

分析:

这个问题就是考察方法重写(override)

方法重写的规则总结为:

  • “两同”方法名相同,形参列表相同(即方法签名相同)
  • “两小”子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等
  • “一大”子类方法的访问权限应比父类方法的访问权限更大或相等

注意:

  • 覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法。

  • 子类重写的方法,如果返回值为类类型,其返回值类型必须与父类返回值类型相同或为父类返回值类型的子类。

这里如果返回值类型改成 包装类型的话,有两点不满足:

  • 首先父类的是Integer  子类是 Long  很明显 Long要比Integer 要大
  • Integer 和 Long 不存在继承关系 ,也就没有了父类子类之说

 

参考资料:

重写的基本概念和条件

仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值