Java接口问题

Java接口问题,java,interface,Java,Interface,我必须使用带有几个示例的API。在其中一个示例中,一个接口直接用于调用该接口的一个方法。然而,由于接口不包含任何实现,我想知道:在不定义实现该接口的类的情况下,如何在示例中使用这些方法来完成任何事情 或者,接口是否也可以包含完整的方法定义?(这里似乎是这样的)你的意思是这样的吗 InterfaceA a = getInterface(); a.method(); 在这种情况下,a将是实现InterfaceA的类的实例-该类是什么并不重要,因为您只关心接口方法。 接口的具体实现必须存在。但是,它

我必须使用带有几个示例的API。在其中一个示例中,一个接口直接用于调用该接口的一个方法。然而,由于接口不包含任何实现,我想知道:在不定义实现该接口的类的情况下,如何在示例中使用这些方法来完成任何事情


或者,接口是否也可以包含完整的方法定义?(这里似乎是这样的)

你的意思是这样的吗

InterfaceA a = getInterface();
a.method();
在这种情况下,
a
将是实现
InterfaceA
的类的实例-该类是什么并不重要,因为您只关心接口方法。

  • 接口的具体实现必须存在。但是,它被其接口引用,这就是为什么它看起来像接口上的调用方法
  • 接口不能有实现(“完整的方法定义”)
查看对象的创建位置。你可以有:

public void doSomething() {
    MyInterface interface = new MyInterfaceImplementation();
    doSomething(interface);
}

public void doSomethingElse(MyInterface interface) {
    interface.someMethod();
}

因此,通过查看
doSomethingElse()
方法,它似乎没有实现,但调用该方法的人提供了实现(
MyInterfaceImplementation

接口只是定义了一个契约。您必须有一个实现来完成实际的工作

您所指的必须是“”这是一种最佳做法


或者API用来提供实现,但您只看到代码是如何使用的。

不,接口只包含方法签名。接口中不能有实现

在您的案例中(最有可能)发生的情况类似于(伪代码):

调用方法:

InterfaceA in = getInterface() // you might get an instance of class A or any other class which implements InterfaceA

in.methodA(); // implementation from whatever class the method returned

也许你的意思是这样的:

    (new Runnable(){
        public void run() {
            System.out.println("I'm running already!");
        }
    }).run();

如果是这样,它被称为。

您可能会谈论两件事:

public static void sort(List list, Comparator c){ ... }
在这里,参数
list
具有接口类型
list
,但是调用该方法的任何人都必须传入一个具体类的实例,如实现该接口的
ArrayList
,该方法的代码将调用该具体类的方法-这种机制称为“动态方法调度”它是多态性的核心OO原则的核心

sort(myList, new Comparator(){
    public int compare(Object o1, Object o2){
        ...
    }
});

这是一个匿名类的示例:代码实际上定义了一个新类,但没有实现
Comparator
接口的名称,同时创建了该类的实例。这在Java中主要用于其他语言使用语言构造(如函数指针、闭包或回调)的情况:传递要在调用的方法中执行的代码。

您可以发布代码示例吗?即使是名字改变了的东西也有助于得到准确的答案。
sort(myList, new Comparator(){
    public int compare(Object o1, Object o2){
        ...
    }
});