假设我有继承的Circle和Square类的标准Draw类.有办法做到以下几点吗?也许用泛型?
class Draw {
public abstract Draw duplicate();
}
class Circle extends Draw {
public Circle duplicate() {
return new Circle();
}
}
class Square extends Draw {
public Square duplicate() {
return new Square();
}
}
Run Code Online (Sandbox Code Playgroud)
是的,重写方法可以返回超类方法返回类型的子类类型。这种技术称为“协变返回类型”,在关于返回类型的 Java 教程的底部进行了描述。这是有效的,因为 aCircle和 aSquare是Draws,所以即使您有一个超类引用,并且您不知道或不关心您真正拥有哪个子类,您仍然可以保证返回 a Draw。
顺便说一句,要编译代码,您只需将Draw类创建为abstract. 其他一切,包括协变返回类型,看起来都很好。