如果您想向初学者解释它,我会坚持这样的想法,即接口可以促进代码内的代码重用和模块化:
例如,假设我们要绘制一些对象:
public class Painter { private List<Paintable> paintableObjects; public Painter(){ paintableObjects = new ArrayList<Paintable>(); } public void paintAllObjects(){ for(Paintable paintable : paintableObjects){ paintable.paint(); } }}public interface Paintable { public void paint();}现在,您可以向学生解释,没有Paintable接口,Painter对象将需要有一些方法来绘制某些类型的对象,例如称为
paintFences()和的方法,
paintRocks()并且我们需要
Collection为每种类型的对象都需要一个新对象,能够绘画。
但值得庆幸的是,我们拥有使绘画对象变得轻而易举的接口,并且如何绘画对象完全取决于实现Paintable接口的类。
编辑
我忘记提到的另一个好处是,如果您需要向代码库中添加新对象以绘画,那么您所需要做的就是创建一个实现Paintable的新类,而Painter类则无需更改。从这个意义上说,Painter类从不依赖于将要绘制的对象,只需要能够绘制它们即可。
编辑2
James
Raybould让我想起了我忘记提到的界面的关键用法:在组件之间有一个接口,例如Paintable对象和Painter对象,可以使您更轻松地与其他人一起开发。一个开发人员可以处理Painter对象,而另一个开发人员可以处理Paintable对象,并且他们必须共同定义一个共同使用的接口,以使它们一起正常工作。我知道当我与大学级别的其他人一起完成项目时,当您试图让每个人都在项目的不同部分上工作并且最终使所有组件完美结合时,这确实很有用。



