【问题标题】:Does Java allow interfaces for methods?Java 是否允许方法的接口?
【发布时间】:2016-02-07 01:50:25
【问题描述】:

是否存在由方法而不是类实现的 Java 接口?

我的教授问Java接口是否可以用于方法,学生们几乎一致拒绝。教授告诉我们,我们需要审查接口。

我知道接口可以概述方法,但是尽管进行了很多搜索,但我找不到任何允许编写方法接口的功能的文档,在我多年的 Java 经验中,我也从未遇到过这样的功能。此外,它对我来说没有句法或结构意义。然而,与其否认我教授的暗示,我想我应该问问周围的人。

【问题讨论】:

  • 不确定我是否收到您的问题,但您似乎在询问自版本 8 以来引入的 Java 的默认方法 (docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html) 功能。
  • 他可能一直在试图说明功能接口。即便如此,功能接口仍然为一系列类型指定契约,就像普通接口一样。 “功能接口由方法而不是类实现”可能是他的观点,但对我来说并不完全正确。

标签: java methods interface


【解决方案1】:

是否可以存在由方法而不是类实现的 Java 接口?

您的问题陈述不清楚。

您是否正在寻找一个类不实现接口而该类中的方法提供实现的示例?

一个例子:

executor.submit(new Runnable(){
                 public void run(){
                    System.out.println("Thread Name in Runnable:"+
                                        Thread.currentThread().getName());
                 }
            });

在这个example

我的主类没有明确引用 implements Runnable 接口,而是 it simply implemented run() method of Runnable interface.

编辑:

如果您的教授正在谈论 java 8 中接口的新特性,请查看此oracle documentation page。借助默认方法的这一新特性,接口在方法中具有主体,即它们为某些方法提供默认实现。

关于默认方法的一些重要说明:

扩展包含默认方法的接口

当您扩展包含默认方法的接口时,您可以执行以下操作:

  1. 根本不提默认方法,让你的扩展接口继承默认方法。
  2. 重新声明默认方法,使其抽象化。
  3. 重新定义默认方法,将其覆盖。

特别是看一下 oracle 文档页面中的“Extending Interfaces That Contain Default Methods”和这个article

【讨论】:

  • 我认为我的教授更可能是指默认方法而不是从接口实现方法,因为她已经询问过后者。不过,她也表示,我们需要了解 Java 7 的类,这意味着了解 Java 8 的特性是可选的。
  • 我已经更新了我的答案,在默认方法上增加了几点。但默认方法仅在 java 8 中引入。
【解决方案2】:

接口指定方法,在 Java 8 中可以提供默认实现。我怀疑这是你如何解释和解释你的导师的话的问题。也许他指的是新的 Java 8“功能接口”特性。你应该研究这个。

【讨论】:

    【解决方案3】:

    这听起来像是您的教授的话选择不当,或者您误解了他所说的某些内容。我可以想象他谈到了匿名类,您可以在其中编写接口的行实现,例如:

    ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
           // do stuff
        }
    }
    

    他或他都提到了接口的默认实现。让他在下一课中澄清可能是有意义的。

    【讨论】:

      【解决方案4】:

      我做了应该很明显的事情:我要求我的教授澄清。看来我对她的话读得太多了;当她说我们应该去审查界面时,她只是字面上的意思。她实际上从未说过我们错了;严格来说,似乎没有方法的接口。但我从所有这些答案中学到了很多——谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 2013-08-12
        • 2014-09-30
        • 2016-09-06
        • 1970-01-01
        相关资源
        最近更新 更多