Java - 理解接口

时间:2012-05-24 01:08:50

标签: java android interface

我已经阅读了Java中的接口,现在我想创建一个允许我创建如下构造的接口:

public class MyClass implements View.OnTouchListener {
    //Implementation
    public boolean onTouch(View arg0, MotionEvent arg1) {
       /*SOME CODE*/    
       return true;
    }
}

所以我想创建类似的接口(类)。如果我不知道哪个类实现了它,我如何从onTouch接口调用OnTouchListener方法?如果我决定从接口(不同的库)中分离类,我怎么能知道哪些类实现了这个接口?希望你明白我的意思。

非常感谢!

3 个答案:

答案 0 :(得分:1)

任何实现接口的类都必须覆盖接口中列出的方法,因此在知道某个类是否具有从接口对象调用的方法的实现时,您可以轻松休息。

要从onTouch拨打onTouchListener,您只需将对象传递到onTouchListener类型的引用,然后从那里开始

onTouchListener myOnTouchListener = new MyClass();
myOnTouchListener.onTouch(arg0, arg1);

对于问题的第二部分,我认为this StackOverflow question应该对您有用。

答案 1 :(得分:1)

我觉得我理解你的部分问题。

  

如果我决定将类与接口(不同的库)分开,我怎么知道哪些类实现了这个接口

使用类似

的设置
MyClass myObject = new MyClass();
if(myObject instanceof myInterface){  //if the object implements the interface
    /*Do Something*/
}
else{
    /*Do Something Else Not Including the Method*/
}

保留字的实例将告诉您给定对象是否是该类的实例 - 无论是通过继承还是实现

David B.回答了你问题的前半部分 - 在对象本身上调用onTouch(arg0,arg1)。

myObject.onTouch(arg0,arg1);

刚看到你的编辑 - 如果你使用instanceof关键字,你可以检查给定的对象是否实现了接口(这意味着它将具有onTouch方法)。 请参阅上面的代码块以了解此类实现。

答案 2 :(得分:1)

  

如果我,如何从onTouch界面调用OnTouchListener方法   不知道哪个类实现了它?

接口不调用方法。正如我所描述的那样,它们在接口和开发人员之间形成了一个契约,无论什么对象实现此接口,它都将具有以下签名的方法。

MyClass中,您可以像调用任何其他功能一样调用onTouch - 将ViewMotionEvent传递给它。

  

如果我,我怎么知道哪个类实现了这个接口   决定将类与接口(不同的库)分开?

Javadoc是你的朋友(作为开发者)。或者,如果您正在对某个集合执行某些操作,例如ArrayListStackQueue或包含Objects的内容,则可以使用以下语法来保证无论如何,您使用的集合仅包含实现您的界面的对象:

ArrayList<? extends View.OnTouchListener> myArrayList;