在某些Java方法中,我看到需要一个Interface参数。 由于无法实例化接口,这是否意味着实现此接口的每个类的对象都可以作为参数传递?
例如,在Android中的ListView类的setOnClickListener方法中,
setOnItemClickListener(AdapterView.OnItemClickListener listener)
需要OnItemClickListener接口(嵌套在AdapterView抽象类中)作为参数。
这里需要传递什么样的物品?
提前谢谢。
答案 0 :(得分:2)
是 - 如果需要接口类型作为参数,则可以传递其类实现此接口的任何对象。
示例:
// the method
void myMethod(MyInterface object) { ... }
// the interface
interface MyInterface {
void interfaceMethod();
}
// class implementing the interface
class MyImplementation implements MyInterface {
void interfaceMethod() {
// ...
}
}
你现在可以这样做
MyInterface object = new MyImplementation();
myMethod(object);
希望这有帮助!
答案 1 :(得分:0)
What Is an Interface?给出了很好的解释
实现接口允许类对其承诺提供的行为更加正式。
因此,您可以使用所需的接口实现任何类,并提供此类的对象作为侦听器。您也可以将该接口实现为匿名内部类,就像在Android开发中广泛完成一样。
setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
....
}
});
答案 2 :(得分:0)
好吧,似乎坚定地制定一个问题可以帮助人们更好地消化它。
如果我们坚持以下事实:
所以在我看来,似乎是以下代码:
setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
....
}
});
实例化一个自动实现 AdapterView.OnItemClickListener 接口的匿名类,在线覆盖 onItemClick()方法并将对象传递给 setOnItemClickListener 功能。
为了更清楚,上面的代码可以写成:
class classDef implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
....
}
}
classDef myClass = new classDef();
setOnItemClickListener(myClass);
谢谢。