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

Mar*_*itt 15 java oop

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

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

public interface Car
{
   IEngine getEngine();
}
public interface ICoolCar extends ICar
{
    @Override
    ICoolEngine getEngine();
}
Run Code Online (Sandbox Code Playgroud)

虽然这很好地解决了我一直在努力解决的问题,但有些事情"感觉"错了.

我在这里做了一些讨厌的设计失礼吗?

Met*_*002 15

不,你正在做正确的事.Covariant返回只是指定类及其下面的类必须返回父类返回的原始通用类参数的特定子类.它还意味着您的子类仍然需要返回引擎的原始接口兼容,但是如果您知道它是ICoolCar,那么它具有ICoolEngine - 因为更具体的接口知道更具体的功能.这适用于接口和类 - 这是正确的,适当的和有用的启动.