我想你想要做的是以下几点:
public abstract class Draw<T extends Draw> {
public abstract T duplicate();
}
public class Circle extends Draw<Circle> {
@Override
public Circle duplicate() {
return new Circle();
}
}
public class Square extends Draw<Square> {
@Override
public Square duplicate() {
return new Square();
}
}
- 上
T
使用仿制药的(有限制,应延长Draw
,以避免奇怪的遗传,如Circle extends Draw<List>
)
- 添加
abstract
关键字在Draw
类
然后,您可以执行以下操作:
Square originalSquare = new Square();
Circle originalCircle = new Circle();
Square duplicatedSquare = originalSquare.duplicate();
Circle duplicatedCircle = originalCircle.duplicate();
编辑
没有仿制药,你可以做这样的事情:
public abstract class Draw {
public abstract Draw duplicate();
}
public class Circle extends Draw {
@Override
public Circle duplicate() {
return new Circle();
}
}
public class Square extends Draw {
@Override
public Square duplicate() {
return new Square();
}
}
感谢Pavel,rgettman和Enno Shioji,我不知道“协变返回类型”。
绘制应该是一个抽象类。否则它看起来很好 – k2col