我的一位新合作者在审核我编写的代码时告诉我,她不习惯在Java代码中直接使用接口,例如:
public interface GeneralFoo { ... }
public class SpecificFoo implements GeneralFoo { ... }
public class UsesFoo {
GeneralFoo foo = new SpecificFoo();
}
相反,期望看到
public interface GeneralFoo { ... }
public abstract class AbstractFoo implements GeneralFoo { ... }
public class SpecificFoo extends AbstractFoo { ... }
public class UsesFoo {
AbstractFoo foo = new SpecificFoo();
}
我可以看出当所有的SpecificFoo通过AbstractFoo共享功能时,这种模式是有意义的,但是如果各种Foos具有完全不同的内部实现(或者我们不关心特定的Foo如何执行Bar,只要它能做到),在代码中直接使用接口是否有害?我意识到这可能在某种程度上是个纷争问题,但我想知道是否存在第二种风格的优势或第一种风格的缺点。