我有一个接口:
public interface Human<D extends Details> {
D getDetails();
}和一个具体的实现:
public class Man implements Human<ManDetails> {
ManDetails getDetails();
}我想以这样的方式扩展Man,这样我就可以做一些类似的事情:
public class Baby extends Man {
BabyDetails getDetails();
}所以基本上我在寻找一种方法,这样人就可以是具体的(我可以自己使用它),同时也是一个泛型,这样其他人就可以扩展它(例如,baby的getDetails()将获得super.getDetails()并从中创建一个新的BabyDetails实例)。
发布于 2014-09-07 22:43:02
您可以考虑将代码更改为
class Man<T extends ManDetails> implements Human<T> {
public T getDetails(){return null;}
}这会让你做一些像这样的事情
class Baby extends Man<BabyDetails> {
public BabyDetails getDetails(){...}
}或
class Baby<T extends BabyDetails> extends Man<T> {
public T getDetails(){...}
}但是作为Sotirios Delimanolis already mentioned,你所做的已经很好了
public class Baby extends Man {
public BabyDetails getDetails(){...}
}因为重写方法可以声明新的返回类型,只要此类型是在重写方法中声明的返回类型的子类型,例如
List<String> method()可以被重写为
ArrayList<String> method();https://stackoverflow.com/questions/25711332
复制相似问题