Java 为什么';接口中的静态方法不需要默认的访问修饰符吗?
在上面的代码中,为什么接口中的静态方法不需要默认的访问修饰符?我知道默认方法是在JDK 8中添加的,并且提供了一个可选的实现,但是,我对静态方法有点不清楚?这看起来真的很像一个类的静态方法 在上面的代码中,为什么接口中的静态方法不需要默认的访问修饰符 我想你是在问,为什么它是Java 为什么';接口中的静态方法不需要默认的访问修饰符吗?,java,interface,static,default,Java,Interface,Static,Default,在上面的代码中,为什么接口中的静态方法不需要默认的访问修饰符?我知道默认方法是在JDK 8中添加的,并且提供了一个可选的实现,但是,我对静态方法有点不清楚?这看起来真的很像一个类的静态方法 在上面的代码中,为什么接口中的静态方法不需要默认的访问修饰符 我想你是在问,为什么它是静态的,而不是静态默认的 在类中,您可以只使用static,他们很可能认为保持一致性会更简单 这看起来真的很像一个类的静态方法 这就是为什么我认为语法是一样的 更好的问题是 为什么我们要使用default作为修饰符 我可以
静态的
,而不是静态默认的
在类中,您可以只使用static
,他们很可能认为保持一致性会更简单
这看起来真的很像一个类的静态方法
这就是为什么我认为语法是一样的
更好的问题是 为什么我们要使用
default
作为修饰符
我可以想到两个原因
已经是一个很容易在语言中重用的关键字,在注释中也以类似的方式使用它default
- 它清楚地表明,此方法旨在实现。他们本可以完全不需要关键字,但一点冗余可以提高代码质量
为什么他们决定在JDK 8的接口中包含static 好处与
类
相同。您可以定义与接口关联但不绑定到特定类的方法。工厂类就是一个很好的例子。在过去,你不得不说
public interface Drive {
int getNumWheels();
default int driveMiles(){
return 10;
}
static int getColorID(){
return 0;
}
}
如果希望记录器
成为接口
,那么它是工厂方法,必须是静态
必须使用实用程序类。现在,您的API可以
Logger LOGGER = LoggerFactory.getLogger(...);
factory方法的接口
与它返回的接口相同,因此没有太多理由精确地确定get
返回的类型
在上面的代码中,为什么接口中的静态方法不需要默认的访问修饰符
我想你是在问,为什么它是静态的
,而不是静态默认的
在类中,您可以只使用static
,他们很可能认为保持一致性会更简单
这看起来真的很像一个类的静态方法
这就是为什么我认为语法是一样的
更好的问题是 为什么我们要使用
default
作为修饰符
我可以想到两个原因
已经是一个很容易在语言中重用的关键字,在注释中也以类似的方式使用它default
- 它清楚地表明,此方法旨在实现。他们本可以完全不需要关键字,但一点冗余可以提高代码质量
为什么他们决定在JDK 8的接口中包含static 好处与
类
相同。您可以定义与接口关联但不绑定到特定类的方法。工厂类就是一个很好的例子。在过去,你不得不说
public interface Drive {
int getNumWheels();
default int driveMiles(){
return 10;
}
static int getColorID(){
return 0;
}
}
如果希望记录器
成为接口
,那么它是工厂方法,必须是静态
必须使用实用程序类。现在,您的API可以
Logger LOGGER = LoggerFactory.getLogger(...);
工厂方法的
接口
与它返回的接口相同,因此没有太多理由精确地确定get
返回的类型。默认和静态
方法的用途不同
扩展包含默认方法的接口时,可以执行以下操作:
static
方法是与定义它的类关联的方法,而不是与任何对象关联的方法。该类的每个实例都共享其静态方法
如果您在另一个类中重新定义静态方法,那么您将在第一个接口中隐藏该定义
请参阅有关的oracle文档页面。默认方法和静态方法的用途不同 扩展包含默认方法的接口时,可以执行以下操作:
static
方法是与定义它的类关联的方法,而不是与任何对象关联的方法。该类的每个实例都共享其静态方法
如果您在另一个类中重新定义静态方法,那么您将在第一个接口中隐藏该定义
请参阅oracle文档页面,关于。既然您不能覆盖静态方法,您就不需要(也不可能)为其定义默认实现,而是为其提供明确的行为。但是,我不明白,为什么他们决定在JDK 8的接口中包含静态方法?它的好处是什么?即使这个问题已经解决了,公认的答案也能很好地解释它。一个小小的总结是,您不再需要为
接口
提供实用工具类
,因为您现在可以在接口
中定义实用工具类的功能。“default”不是访问修饰符,它是默认方法实现的标记。在接口中,只允许“公共”访问修饰符