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