关于oop:接口使用如下

Interface uses as like this

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


接口更像是一个契约。它不提供任何实现重用。这实际上使您的代码与实现脱钩。拥有一个包含所有抽象方法的抽象类提供了相同的好处(如果我们忽略了多重继承的问题)。

作为一个很好的例子,看看Java集合,以及如何使用收集、映射和列表的接口松散耦合。


因为你使用的术语,我假设你在谈论Java。

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

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

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


抽象类允许您描述字段和非抽象方法。它不限制您简单地描述接口,它涉及一些逻辑。另一方面,接口做它所说的,与逻辑无关。从客户机代码的角度来看,您不必担心实现和工作方式。它允许您在没有附加代码的情况下与其他接口交换一个接口实现。

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


我喜欢将这些类型的特性称为"隐含的代码文档"。使用一个接口可以将大量的信息传达给其他将在您的项目中工作的开发人员,并且这些信息可以帮助防止许多头痛。

例如,如果一个类实现了一个有两个方法的接口,而我是这个项目的新手,这可能会告诉我,编写这些方法的开发人员不希望方法签名更改。

想想dog类和cat类,它们都实现了接口sociable,其中有方法walk(int speed)、sit()、laydown()、bite(int degree)。

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

接口是帮助描述类的一种方法。在这个例子中,一只善于交际的狗和一只善于交际的猫有很多共同点。

就可重用性而言,您的类变得可重用,因为其他类很难进入并更改方法签名中定义的契约。

最后,虽然一个类只能子类一个类,但它可以实现多个接口。因此,使用一个接口的好处是我可以拥有一只实现大型和社交的狗,以及一只实现小型和社交的猫。