继承规则 - 覆盖方法的返回类型可以是在重写方法中声明的返回类型的子类

时间:2015-05-06 05:25:05

标签: java inheritance

我正在通过继承规则。我遇到了以下规则

重写方法的返回类型可以是重写方法中声明的返回类型的子类。

我不明白它背后的目的。 如果有人可以解释它。

2 个答案:

答案 0 :(得分:1)

它允许您在使用特定子类时使用更具体的返回类型。一个常见的例子是在覆盖clone()方法时使用更具体的返回类型。它被宣布为

protected native Object clone() throws CloneNotSupportedException;

所以它返回Object。但是在你的特定课程中(比如,MyObject)你可以像这样重新定义克隆:

public MyObject clone() {
    try {
        return (MyObject)super.clone();
    }
    catch(CloneNotSupportedException ex) {
        throw new InternalError();
    }
}

这样,MyObject类的用户可以调用clone()方法并获得MyObject结果而无需额外投射。这很方便。

答案 1 :(得分:0)

好的,这就是我认为可能发生的事情。

假设您有以下内容:

UITableViewDataSource

所以这里发生的是我们覆盖超类方法public class Animal { ... public Animal anotherAnimal() { return new Animal(); } } public class Dog extends Animal { ... public Dog anotherAnimal() { return new Dog(); } } ,规则是在子类(Dog)中,我们被允许返回一个不同于超类'方法的对象,但是它必须返回一个子类的对象。

换句话说,因为anotherAnimalDog的子类,所以我们可以在重写的Animal方法中返回它。