初始化接口?


问题内容

在当前的问题中(我将文件打印到Java中的物理打印机),我一直在疯狂地遍历代码,试图从所使用的每个类的javadoc中吞噬所有有用的丢失信息。

现在,我从以前的问题中抽出了很多代码,所以有相当一部分我不是自己写的。我注意到的问题是,我抓取的代码正在初始化一个对象,例如实现接口(Doc)的“SimpleDoc”并将其分配给该接口?

小代码段:

Doc mydoc = new SimpleDoc(textStream, flavor, null);

现在,据我所知,我们创建了对象。我熟悉继承,并且熟悉使用接口允许类“继承”多个超类的技巧。

但这只是不对劲。您可以创建一个实现接口的类,这对我来说很好。但是,当创建接口并将对象简化为接口时,会发生什么情况?当我完全引用mydoc时,我要访问什么?


问题答案:

诀窍是要意识到您不是在“创建”,“实例化”或“初始化”接口。您只是将变量定义为您知道实现该接口的对象。

你基本上是告诉其他程序员对这个代码,该方法的其余部分,你只对事实感兴趣的工作即myDoc是一个Doc(即,一些满足Doc接口)。这可以使编程变得更简单,因为IDE的自动完成功能现在只会向您显示此接口定义的方法,而不是a
SimpleDoc能够执行的所有操作。

想象一下,将来您想扩展功能,以便可以根据某些输入使用不同的Doc实现。而不是显式创建SimpleDoc,而是说:

Doc mydoc = docFactory.getByType(inputType);

docFactory能产生任何类型的Doc,并且此方法并不真正关心什么样的被实例化,因为它会像对待一个Doc不分。