在扩展接口中覆盖返回类型-不好的主意?


问题内容

在Java中,您可以执行以下操作:

public interface IEngine{}
public interface ICoolEngine extends IEngine{}

public interface Car
{
   IEngine getEngine();
}
public interface ICoolCar extends ICar
{
    @Override
    ICoolEngine getEngine();
}

虽然这很好地解决了我一直在努力解决的问题,但与此有关的某些“感觉”是错误的。

我在这里犯一些讨厌的设计假舞曲吗?


问题答案:

不,您做对了。协变量返回仅指定该类及其下的类必须返回父类返回的原始常规类参数的特定子类。这也意味着您的子类仍与要求其返回Engine的原始接口兼容,但是如果您
知道 它是ICoolCar,则它具有ICoolEngine-因为更具体的接口知道更具体的功能。这适用于接口以及类-这是正确,正确且对引导有用的。