接口是任何类都可以扩展的类的唯一类型。但不幸的是,java开发人员(?)删除了覆盖接口静态方法的能力。任何人都知道如何在不创建扩展它的类的新实例的情况下调用接口方法?
答案 0 :(得分:1)
接口本身不是类,它们是抽象类型。
在Java 8中,您提到的“小脑子”Oracle开发人员确实允许接口中的default
和static
类型。看看这个例子。来自JournalDev
<强> 1。默认类型
public interface Interface1 {
void method1(String str);
default void log(String str){
System.out.println("I1 logging::"+str);
}
}
接口具有默认类型,在被类调用时不需要重写/重新实现。
<强> 1b中。默认冲突 假设您有两个接口。第1部分中显示的那个,以及以下内容:
public interface Interface2 {
default void log(String str){
System.out.println("I2 logging::"+str);
}
}
如果在类中实现这两个接口,例如
public class MyClass implements Interface1, Interface2 {
...//other implementations.
@Override
//Must override/provide implementation to avoid ambiguity
public void log(String str){
System.out.println("MyClass logging::"+str);
Interface1.print("abc");
}
}
您必须提供实施,以避免两个已实施接口发生冲突。
<强> 2。静态类型 正如您所问,您可以在接口中使用静态方法。从同一article
中查看此示例public interface MyData {
default void print(String str) {
if (!isNull(str))
System.out.println("MyData Print::" + str);
}
static boolean isNull(String str) {
System.out.println("Interface Null Check");
return str == null ? true : "".equals(str) ? true : false;
}
}
默认和静态之间的唯一区别是无法覆盖静态方法。这是Java的核心原则。因此,这个静态方法将保持在实现此接口的类中。
找到很多答案 1 :(得分:0)
Java接口静态方法通过不允许实现类来覆盖它们来帮助我们提供安全性。我们无法为Object类方法定义接口静态方法,我们将编译器错误称为“此静态方法无法从Object隐藏实例方法”。
为了从Java程序调用接口方法,程序必须首先实例化接口实现程序。然后可以使用实现对象调用方法。