接口使用如下

时间:2011-01-08 06:54:16

标签: oop interface

如果接口有空方法(隐式抽象方法),那么它的用途是什么?为什么我们说它减少了代码并提供了可重用性?给我一个真实的例子,使用一个显示抽象类和接口之间差异的接口。

4 个答案:

答案 0 :(得分:4)

界面更像是合同。它没有提供任何实现重用。这实际上使您的代码从实现中解除耦合。使用所有方法抽象的抽象类提供了相同的好处(如果我们忽略多重继承的问题)。

有一个非常好的例子,请看一下Java Collections以及如何使用Collection,Map和Lists接口松散耦合。

答案 1 :(得分:2)

由于您使用的术语,我将假设您正在谈论Java。

接口可用于代替抽象类,因为类只能从单个类继承,但可以实现多个接口。

接口是程序各部分之间的契约。它说该程序的一部分对实现此接口的类有一定的期望。只要这些类支持接口契约,程序的其他部分就不关心如何实现该合同,只是 实现。

它允许多态性和代码的重用。例如,(关于Java),您可以使用List接口。您可以编写与List对象接口的代码,而不关心List的实现。然后,您的代码可以与LinkedListArrayList或其可能处理的任何其他类型的列表一起使用,并且它应该能够管理得足够好。您现在可以通过此List接口合同编写具有某些期望的代码,15年后,有人可以使用最新技术创建自己的List实现,您的代码将能够使用它

答案 2 :(得分:1)

我喜欢将这些类型的功能称为“隐含代码文档”。使用界面可以将大量信息传递给将要处理项目的其他开发人员,这些信息可以帮助防止很多麻烦。

例如,如果一个类实现了一个包含2个方法的接口,并且我是该项目的新手,那么可能会告诉我编写这些方法的开发人员不希望方法签名发生变化。

想想Dog类和Cat类都实现了Sociable接口,其中有方法walk(int speed),sit(),layDown(),bite(int degree)。

如果我们有一个Dog类和一个实现这些方法的Cat类并且它们存在依赖关系,那么更改一个方法签名可能会产生一些负面影响。

接口是一种帮助描述类的方法。在这个例子中,Sociable Dog和Sociable Cat有很多共同点。

就可重用性而言,您的类可以重用,因为其他人更难进入并更改方法签名中定义的合同。

最后,虽然一个类只能子类化一个类,但它可以实现多个接口。因此,使用界面的优点是我可以拥有一个实现Big和Sociable的Dog,以及一个实现Small和Sociable的Cat。

答案 3 :(得分:1)

Abstract类允许您描述字段和非抽象方法。它并不限制您简单地描述接口,它涉及一些逻辑。另一方面,接口做了它所说的,与逻辑无关。从客户端代码方面来看,您无需担心实现以及工作原理。它允许您与其他接口实现交换一个接口,无需额外的代码。

在实现代码方面,接口允许您执行多个“继承”。