欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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{
}

相关标签: #java基础