通常,最好的方法是依赖系统中的抽象类型(接口或抽象类)。
在您的示例中,您确实可以编写:
SimpleDoc mydoc = new SimpleDoc()
但是,问题在于所使用的代码
mydoc将取决于具体类型
SimpleDoc。但这本身不一定是问题,但是,假设您创建了一个新的实现
Doc,例如
ComplexDoc。
您可以将声明更改为:
ComplexDoc mydoc = new ComplexDoc();
现在,您传递
mydoc给的所有place方法也都必须更改。
但是,如果您
Doc最初使用过,则只需要进行一次更改:
Doc mydoc = ComplexDoc();
当您使用Collections API时,这非常有用,在这种情况下,通常会转换另一个实现,或者在测试用例中使用Mocking。



