当前位置: 首页 > 知识库问答 >
问题:

接口除了实现多态和多重继承还有什么用途吗?

穆景辉
2023-03-14

我试图了解使用接口的好处是什么,以便我可以知道何时以及如何使用它们。互联网上的大多数资源都是相对表面的,解释了接口是如何工作的,但现在为什么要使用它们,当我查找名义上的问题时,我没有得到任何结果告诉我接口的目的是否超出了多态性和多重继承。

我的推理是,如果一个接口只被一个类继承,它将是无用的,当一个接口被多个类继承时,它没有区别,除非它用于多态,唯一使实现不同于扩展的是多重继承。

如果我确实知道他们的目的仅限于此,我会对我的设计决策更有信心,如果我了解到此之外的目的,这将填补我知识中的一个严重空白。我使用design patterns标签是因为也许有一种设计模式,它以一种明显超越了多态或多重继承的方式来利用接口。

共有2个答案

微生永春
2023-03-14

假设你说的是语言特性(例如Java中的< code>interface关键字),而不是一般的计算术语,接口的目的是多态性。

接口等工具可能被滥用于其他目的,例如:

>

  • 作为交流共性的一种方式——这可能会适得其反,因为如果多态不是设计的目标,那么声明实现接口的类就会做出不必要的promise来实现它。当共性最终被打破时,这可能不再相关,这可能是因为类没有被多态使用。

    作为记录契约并允许类实现更改的一种方式 - 在 Java 中,这是通过公共/受保护的方法实现的,Javadoc 是记录契约的方式。有些语言甚至没有这个,他们仍然记录合同。当然,这仅在合约以函数调用的形式出现时才有效(与例如 RESTful HTTP API 相反),并且它仅在您对文档内容有规则(例如包边界)时才有效;您不希望为每个类创建一个接口,即使您记录了每个的协定。

    从物理上对接口的使用者隐藏东西——这也是关于记录合同,但是如果你的类有数据或受保护的方法,并且你想阻止包之外的任何东西继承,你只能公开一个接口。但是你也可以使用最终

    接口不是为了实现多重继承而设计的;它们只在对多态性有用的程度上促进了多重继承;它实际上不允许您继承任何字段,直到最近在Java中使用默认方法(因此,不是设计的),甚至不允许代码。

    在野外,你会看到只有一个类实现接口的包。这不会使界面无用;将来可能会有更多的实现,事实上,包可能希望允许调用方提供自己的实现。

  • 仇炜
    2023-03-14

    如果一个接口只被一个类继承,它将是无用的

    我同意,但是你可以在《Java接口方法:每个类都应该实现一个接口吗?

    当一个接口被多个类继承时,除非它用于多态,否则没有区别

    我同意,实现一个接口,然后通过直接在具体类上调用它的方法来绕过它是愚蠢的。实现接口的目的是调用它的抽象方法,这就是多态性。由于多态性是面向对象编程的主要工具,所以您可以将此语句进一步说明,除非OOP用于多态性,否则OOP没有任何区别。

    实现不同于扩展的唯一区别是多重继承

    不,这些Java结构之间的主要区别是接口实现有利于无状态继承,而类扩展有利于有状态继承。Java碰巧支持多个无状态继承和单个有状态继承。这种二分法可能被认为是一个错误。

    接口除了实现多态和多重继承还有什么用途吗?

    在实践中,是的。您可以找到用于其他目的的接口,例如常量接口或标记接口。这些做法是否可取一直存在争议。

     类似资料:
    • 问题内容: Java不允许多重继承,但是它允许实现多个接口。为什么? 问题答案: 因为接口只指定什么类是做,而不是如何它是做什么的。 多重继承的问题在于,两个类可能定义不同的方式来做同一件事,而子类无法选择该选择哪一个。

    • 我们知道在面向对象编程的时候,比如Bird既有叫的功能,又有飞的功能,可以通过继承Animal和实现飞的接口的功能实现: 问题1: 为什么很多不使用多继承?而是选择继承类+实现接口? 这个有什么好处? 如果还有其他类的功能比如: 问题2: Bird想要继承吃素的功能,请问这个如何进行实现呢?就不能进行继承了对吗?

    • 问题内容: 我是Java程序员,正在学习使用Go语言编程。到目前为止,我真的很喜欢这种语言。比Java多得多。 但是有一件事我有点困惑。Java具有接口,因为类只能从一个类继承。由于Go允许多重继承,所以接口的意义是什么? 问题答案: 多态性 接口使函数具有“占位符”参数,该参数可以采用不同的结构作为参数。例如,如果结构Man,Woman,Child实现了Human接口,则参数为Human的方法可

    • 问题内容: 在现实世界中,人们将其用于(解决什么类型的问题)?我可以看到其中的一些示例代码吗?我所能找到的只是关于猫和狗说话或喝牛奶或咖啡的人的代码… 人们真的通过接口实现多态吗?做什么的? 问题答案: 当然, 下面是“观察者”模式的具体示例,该模式在记录器系统中使用类和接口来实现多态行为: 然后,您可以按以下方式使用它: 希望这有助于您理解接口和多态性。

    • 本文向大家介绍PHP接口多继承及tarits实现多继承效果的方法,包括了PHP接口多继承及tarits实现多继承效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP接口多继承及tarits实现多继承效果的方法。分享给大家供大家参考,具体如下: 接口多继承 在PHP的面向对象中,接口可以继承接口。PHP类只能继承一个父类(单继承),但是接口可以实现多继承,可以继承一个或者多个接口

    • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self):