Java中方法重写的返回值修饰符问题
程序员文章站
2022-07-15 07:58:10
...
先说下返回值问题,在李阳的Java疯狂讲义中说重写返回值类型要比父类小,什么叫比父类小,即使实现或者继承了该类的类,经过查阅相关资料得出下面结论
Java 5或者以前,必须一样,java 7 java 8可以不同,但是必须是父类返回值的派生类。
再说下访问修饰符,Java中访问修饰符的范围大小 public > protected > default > private,子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限;
结合例子说明一下,代码是在JDK1.8的环境下编辑的。
类之间的逻辑关系也很简单
- Child 继承自 Father
- Vegetable 继承自 Food 类并实现了 Healthy 接口。
贴下代码:
public class Father {
protected Food protectedLoad() {
return null;
}
protected Healthy protectedLoadInterface() {
return null;
}
}
在 Father 类中定义了两个方法
- protectedLoad: 修饰符为 protected ,返回值为 Food 类。
- protectedLoadInterface: 修饰符为 protected,返回值为 Healthy 接口。
public class Chlid extends Father{
@Override
public Vegetable protectedLoad() {
return null;
}
@Override
protected Vegetable protectedLoadInterface() {
return null;
}
}
在继承自 Father 的 Chlid 类中,分别对 protectedLoad 和 protectedLoadInterface 方法实现了重写。可以看到
- protectedLoad: 修饰符拓展为了 public ,返回值为 Food 类的子类 Vegetable。
- protectedLoadInterface: 修饰符为 protected ,未做修改,返回值为 Healthy 接口的实现类 Vegetable。
所以,经过实践可以很清楚的得出我们上面的结论
- 重写方法返回值类型要比父类小。
- 重写方法的访问修饰符不能低于父类的方法访问权限。
另外三个辅助类
public class Food {
}
public interface Healthy {
}
public class Vegetable extends Food implements Healthy{
}
上一篇: Oracle 索引 详解
下一篇: RocketMQ集群搭建