【问题标题】:Java static method vs function [duplicate]Java静态方法与函数[重复]
【发布时间】:2017-06-08 14:05:01
【问题描述】:

这些代码在 java 8 中有什么区别:

这个:

public class Hello {
    public static void sayHello() {
        System.out.println("ghasedak.Hello !!!");
    }
}

还有这个:

public interface Hello {
    public static void sayHello() {
        System.out.println("ghasedak.Hello !!!");
    }
}

这是主课:

public class MainClass {
    public static void main(String[] args) {
            Hello.sayHello(); //for function
            Hello.sayHello(); //for class
    } 
}

【问题讨论】:

  • 你确定java允许接口中的方法实现吗?
  • 您的第二个实现根本无法编译。
  • @KrishnaKuntala 自 Java 8 起允许使用
  • 接口上的这个调用默认方法,来自java8
  • @JNomad 错误。它是接口中的静态方法,而不是默认方法。

标签: java function oop


【解决方案1】:

在 Java 8 中,您现在可以在接口中定义方法。所以从技术上讲,它们是相同的。与接口的区别仍然是你不能实例化它们。所以你只能使用其中的方法。

这里是链接:https://en.wikipedia.org/wiki/Interface_(Java)

它讲述了现在 Java 8 中的接口如何交互。

在您的代码中,它仍然应该通过接口类方法调用 Hello 类方法,因为正如我所说的,接口不能被实例化。

【讨论】:

    【解决方案2】:

    两者没有区别。

    第一个示例显示了在类中实现的静态方法,而第二个示例显示了在接口中实现的静态方法。如果您使用 JDK 7 或更低版本,第二个示例将无法编译,因为正如其他人已经说过的,接口中的静态方法支持仅在 Java 8 中添加。Here 是一篇非常有用的 StackOverflow 文章,它解释了为什么支持静态和接口中的默认方法是在 Java 8 中添加的。

    是否要将静态方法(可能是实用方法)保留在类或接口中,取决于具体情况。例如。如果您想向一组不扩展通用基类但实现通用接口的类添加新的通用方法。由于没有通用基类,因此您可以将通用方法添加到接口中。

    【讨论】:

      【解决方案3】:

      我认为我们有两个不同之处:
      1) 接口只能有一个功能。
      2)重要:接口不是类,所以没有阻塞静态:
      查看此代码:

      public class Hello {
          static {
              System.out.println("Ok");
          }
          public static void sayHello() {
              System.out.println("ghasedak.Hello !!!");
          }
      }
      

      这个块在你调用类时运行。
      您不能在功能接口上执行此操作。 (接口没有这个块)
      抱歉英语不好

      【讨论】:

        猜你喜欢
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多