不创建新实例的Java调用接口方法

不创建新实例的Java调用接口方法,java,methods,interface,instance,Java,Methods,Interface,Instance,接口是任何类都可以扩展的唯一类类型。但不幸的是,java开发人员(?)取消了重写接口静态方法的能力。有人知道我如何调用接口方法而不创建扩展它的类的新实例吗?Java接口静态方法通过不允许实现类重写它们来帮助我们提供安全性。我们无法为对象类方法定义接口静态方法,我们将得到编译器错误,因为“此静态方法无法对对象隐藏实例方法” 为了从Java程序调用接口方法,程序必须先实例化接口实现程序。然后可以使用实现对象调用方法 接口本身不是类,它们是抽象类型。 在Java8中,您提到的“头脑简单”的Oracle

接口是任何类都可以扩展的唯一类类型。但不幸的是,java开发人员(?)取消了重写接口静态方法的能力。有人知道我如何调用接口方法而不创建扩展它的类的新实例吗?

Java接口静态方法通过不允许实现类重写它们来帮助我们提供安全性。我们无法为对象类方法定义接口静态方法,我们将得到编译器错误,因为“此静态方法无法对对象隐藏实例方法”


为了从Java程序调用接口方法,程序必须先实例化接口实现程序。然后可以使用实现对象调用方法

接口本身不是类,它们是抽象类型。 在Java8中,您提到的“头脑简单”的Oracle开发人员确实允许接口中的
default
static
类型。看看这个例子。从

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。静态类型 正如您所要求的,您可以在接口中使用静态方法。看看这个来自同一个国家的样品

默认方法和静态方法之间的唯一区别是不能重写静态方法。这是Java的核心原则。因此,该静态方法将保持实现该接口的类的原样

可以从中找到很多

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;
    }
}