我正在学习Java界面,我发现了一些奇怪的东西......
给定一个接口:
public interface Worker {
public void doWork();
static void aTestStatic() {
System.out.println("I can be called within the Interface!");
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Worker.aTestStatic();
}
它确实有效:
I can be called within the Interface!
为什么呢?我认为在Interfaces中只能声明没有实现的方法,而不是一个类,它们不能被调用但只能实现。
提前致谢。
答案 0 :(得分:3)
正如this article所解释的那样,
Java 8中最大的设计变化之一是接口概念。在Java 7之前,我们可以在接口中只有方法声明。但是来自Java 8的,我们可以在接口中使用默认方法和静态方法。
但请注意,静态方法仅对接口方法可见且无法覆盖。在某些情况下,它很有用,比如提供实用程序方法(例如,使用Java 8,我们可以在集合接口中移动整个Collections.XX
方法)。
答案 1 :(得分:1)
这是Java 8的一个相对较新的功能,它允许您在接口中编写静态实现。
在Java 8之前,程序员被迫为其接口定义一个带有静态方法的类,例如Collections
类,它完全由在各种集合接口上运行的静态方法组成。
向接口添加静态方法允许程序员将相关功能与接口定义结合在一起,使代码更易于理解和维护。