我正在通过继承规则。我遇到了以下规则
重写方法的返回类型可以是重写方法中声明的返回类型的子类。
我不明白它背后的目的。 如果有人可以解释它。
答案 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)中,我们被允许返回一个不同于超类'方法的对象,但是它必须返回一个子类的对象。
换句话说,因为anotherAnimal
是Dog
的子类,所以我们可以在重写的Animal
方法中返回它。