【问题标题】:need explanation of 'this' which pass to my method需要解释传递给我的方法的“this”
【发布时间】:2012-02-02 19:33:00
【问题描述】:

如果我有一个具有如下 接口 定义的类;

public class FirstClass {

  private static onDragListener listener  

  public interface onDragListener{
      void doSomething();
  }

  //a static method to set on my drag listener
  public static void setOnDragListener(onDragListener listener){
           FirstClass.listener = listener
  }

}

正如你在上面看到的,有一个setOnDragListener(onDragListener listener) 静态方法可以设置在监听器上。

然后,还有另一个类实现了第一个类中定义的接口,如下所示:

public class SecondClass implements onDragListener{
    public void initialize(){
          FirstClass.setOnDragListener(this); //my question is here about 'this'. 
    }
}

我的问题是为什么我可以在上面的initialize() 方法中使用this 作为参数传递给FirstClass.setOnDragListener(this);

我的意思是setOnDragListener(onDragListener listener) 期望传入一个onDragListener 类型的参数,第二类的initialize 方法中的this 是否意味着接口的真正实现或者我如何理解它?

【问题讨论】:

    标签: java interface


    【解决方案1】:

    继承是is-a 关系。

    SecondClass is-a onDragListener

    thisSecondClass

    所以,thisonDragListener

    【讨论】:

      【解决方案2】:

      在这种情况下,您指的是将实现 onDragListener 的对象本身。

      【讨论】:

        【解决方案3】:

        setOnDragListener() 期望 onDragListener 接口作为参数传递。 SecondClass 实现了onDragListener 接口,因此您可以将thisSecondClass 实例传递给FirstClass.setOnDragListener(),因为this 实现了onDragListener

        【讨论】:

          【解决方案4】:

          由于您的 SecondClass 实现了 onDragListener 接口,因此它可以在任何需要 onDragListener 的地方使用,因为它是一个 onDragListener。

          对 FirstClass.setOnDragListener(this) 的调用中的“this”是 SecondClass 的当前实例,它是一个 onDragListener。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-11-18
            • 1970-01-01
            • 2016-01-26
            • 1970-01-01
            • 2014-07-05
            • 2017-08-08
            • 2022-01-11
            • 1970-01-01
            相关资源
            最近更新 更多