方法重写返回值的问题

为什么方法重写返回值是基本数据类型时,子类的返回值必须要与父类一致,而是引用数据类型时子类的返回值却可以小于等于父类的返回值呢?

这是个好问题:把重载与重写区别以及java多态的知识点涵盖在内。

1.重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
2.重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同

img

方法匹配在编译时根据引用对象的类型找同名的方法
方法绑定是继承关系中 运行时根据实例对象的类型去找同名的方法
比如 B类继承A类 A父类实object
现在写 A a=new B(); 假设B中有个方法eat() 而 A中没有 编译时 找a.eat() 直接报错
而 假设A和B中都有一个方法 play() 这时候调用 实例对象的方法 a.play() 肯定是调用实例B的方法
又比如写一句 A a2=new A() 这时候呢 a2.play() 就是调用A的方法 因为实例是A的。
这正好也能说明 多态的缺点 即 父类不能调用子类特有的方法 比如例子中的a.eat()直接报错
现在回答你问题 基本数据类型没有继承关系吧 就这样