【问题标题】:Did Java invent interfaces?Java 发明了接口吗?
【发布时间】:2011-02-15 01:16:35
【问题描述】:

我知道 C++ 纯虚拟类,但 Java 更进一步,为多接口(非实现)继承创建了一流(没有双关语)概念,interface。它现在是主要静态类型语言的主要内容。 Java 发明了接口的概念吗?还是它在旧语言中也作为一流的概念出现?

【问题讨论】:

  • Java 的设计者真的发明了什么吗? AFAIK,他们只是汇集了在语言诞生之前相当长一段时间内一直在徘徊的一堆想法。
  • @Neil:没错,但这就是大多数非学术语言的创建方式。
  • @Joachim 是的,我不是有意批评。
  • @Trevor Tippins 你为什么删除你的答案?这是完全合法的。
  • @Neil Butterworth:静态检查异常。

标签: java programming-languages interface history


【解决方案1】:

我喜欢界面,但我才刚刚开始学习如何使用它们。编程语言中存在的最灵活和最强大的接口系统是在 Go 中,但正如人们指出的,Java 普及了它们,但它们在 20 年前就存在了,我希望我能记住前几天发现的语言,以 'g ' 我想,名字中可能是某种矿物或花朵。

接口的核心原则是围绕它们之间如何传递值来创建对事物的描述。他们创建了一种将具有某些用途的数据块传递给具有非常接近用途的另一种形式的方法。接口通常使用命名方案来指示接口定义围绕几个事物之间的抽象共性进行。在编程中,一切都归结为字节,因此您可以围绕共享字节构建接口,总有一些共同特征。

在实际意义上,接口是一组围绕数据类型的方法,您没有指定,除了模糊。 Go 会教你很好的关于接口的知识。接口出现在最面向对象的语言中最为突出,如 OP、java,但据我所知,Go 拥有最强大的接口系统。 Go 是静态类型的,但接口类型在 Go 中对数据没有限制。只有您通过接口类型定义的限制才能通过。

我刚刚开始学习如何在 Go 中使用接口进行编程,但是从 Go 程序员的经验中获得的许多智慧对任何对接口感兴趣的人都有帮助。接口需要紧凑且功能强大。很多时候,您不需要定义接口,因为数据太不同了。也许对于存储和传输,所有数据===所有数据。这就是接口的用途。两个不同的系统,它们共享什么数据结构。这正是接口的本质。

【讨论】:

    【解决方案2】:

    这里是 Java 语言环境一文的摘要。

    Java 语言中的接口只是对象声明它实现的方法的规范。接口不包括实例变量或实现代码——仅包含常量和方法的声明。 Java 语言中接口的概念是从 Objective-C 的协议概念中借用的。

    http://java.sun.com/docs/white/langenv/Object.doc2.html#6185

    【讨论】:

      【解决方案3】:

      我很确定 IUnknown 和 IDispatch 在 Java 之前就已经存在了……但那是 COM,它并不是一种真正的语言。

      【讨论】:

        【解决方案4】:

        CORBA 使用的 IDL,我相信可以追溯到 80 年代初。

        【讨论】:

        • 是的,但 IDL 不是语言的一部分,而是语言互操作规范的一部分。但你是对的,它可能在某种程度上影响了 Java 接口概念。
        • @Jordão IDL 不是编程语言。然而,它是一种语言(即 L 位)。
        【解决方案5】:

        据我所知,Objective-C 是第一种具有接口功能的语言。至少在 Java 发明之前它就有了。

        【讨论】:

        • 我不知道 Objective-C,但从它的维基百科条目来看,它的 interface 似乎与特定类接口的前向声明更相关(如 C++ 头文件),而不是Java接口的概念。如果我错了,请纠正我!
        • 当然可以,但“接口”概念在 Objective-C 中称为“协议”。
        【解决方案6】:

        我很确定 Java 开发人员并没有发明接口的概念,而是将它们普及。

        【讨论】:

          【解决方案7】:

          没有字段的纯虚拟类甚至在 Java 之前就在 C++ 接口中被调用。 Java 接口背后的想法是删除 C++ 中令人讨厌的多重继承,但保留类似的功能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-17
            • 1970-01-01
            • 1970-01-01
            • 2010-12-29
            • 2015-03-16
            • 2011-01-14
            • 2014-11-21
            • 2018-12-06
            相关资源
            最近更新 更多