【问题标题】:Java: No interface implementation?Java:没有接口实现?
【发布时间】:2009-01-29 18:11:33
【问题描述】:

今天我收到了我的书“Head First Design Patterns”的邮件。到目前为止非常有趣的东西,但是我确实对它的内容有疑问。

我没有 Java/C# 背景,也不希望现在就跳入这些语言(我试图首先专注于 C++)。书中说java没有接口的实现......这意味着对于该接口的每次更改,您都必须修改实现该接口的所有子类。

这是如何在 C++ 中完成的?我错过了什么?

【问题讨论】:

  • 兴趣点:您可能想看看 Jeff 对 Head First Design Patterns 的看法。提示:他不是粉丝。 codinghorror.com/blog/archives/000380.html
  • 我发现这本书很有帮助。大多数初学者似乎编写了一堆意大利面条式代码,并且不明白我说“我们在这里使用模板模式是因为......”时的意思。诚然 Jeff 有一些有效的观点,初学者将一些简单的事情复杂化(计算机科学至死)

标签: java c++ interface design-patterns


【解决方案1】:

本书作者的意思是,如果您更改接口成员的签名或添加新的签名,您将需要在实现类中进行这些更改,以便它们继续实现接口。

只要您使用完全相同的签名(即具有相同的名称、返回类型以及参数的顺序和类型)实现接口的成员,您就可以以任何您想要的方式更改实现类。

我的印象是你不太了解接口是如何工作的,所以我建议阅读C# interface specification on MSDN,这在我认为的主题上非常清楚(在 Java 中几乎相同,除了在 Java 中你使用“implements”关键字而不是冒号 (:) 来声明类实现了特定接口)。

【讨论】:

    【解决方案2】:

    ...如果您想更改接口中方法的签名,一个好的 IDE(eclipse、netbeans...)可以帮助您重构所有实现此接口的类。

    【讨论】:

      【解决方案3】:

      在 C++ 中也是如此。

      C++没有interface关键字,但是纯虚类,所有纯虚方法,都是一样的思路。

      如果您更改了纯虚拟类中的方法签名,则其所有子类都必须遵循才能编译。

      【讨论】:

        【解决方案4】:

        Java 接口的 C++ 等价物是一个只有纯虚方法的类。

        您提到您“已经看到了很多这样的 Runnable/Threadable 接口,这些接口可以在不触及这些子类的情况下进行修改。”从您的描述中很难确定,但您之前可能看到的是这样的:

        Runnable r = new Runnable() {
            public void run() {
                // do something here
            }
        };
        

        这是一个实现Runnable接口的匿名类;它不会以任何方式修改界面。

        【讨论】:

          【解决方案5】:

          interface 定义了实现接口的类应遵循的约定。这类似于抽象基类 - 它基本上将方法的实现委托给派生类。

          是的,如果您修改接口 - 您必须修改所有实现该接口的类。我的猜测是,您在 Java 代码中看到的 Runnable 实例是匿名类,它们实际上实现了 Runnable,而不是修改接口本身。

          Runnable myOwnThread = new Runnable() {
            public void run() {
             // Do something here
            }
          };
          

          在 Java 中,您不能修改标准库中提供的接口(和类)。 C++ 中的等价物可能是纯虚拟类

          【讨论】:

            【解决方案6】:

            好的,我会问他明显的问题:

            如果您想在 C++ 中进行设计模式,为什么您会阅读除了原始的 Gang of Four Design Patterns 书之外的任何其他内容?

            是的,具有纯虚方法的 C++ 类等效于 Java 或 C# 接口。

            【讨论】:

            • 因为 GoF 书籍有时是不必要的学术性和密集性。 Head First 是一个非常容易进入模式思考的切入点。
            猜你喜欢
            • 2019-10-07
            • 1970-01-01
            • 2015-11-08
            • 2017-10-21
            • 2012-04-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多