нужно объяснение «это», которые переходят на мой метод - PullRequest
2 голосов
/ 02 февраля 2012

Если у меня есть класс, у которого интерфейс определение, как показано ниже;

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'. 
    }
}

У меня вопрос, почему я могу использовать this в качестве аргумента для передачи FirstClass.setOnDragListener(this); в методе initialize() выше?

Я имею в виду, setOnDragListener(onDragListener listener) ожидает передачи аргумента типа onDragListener, означает ли this в методе initialize второго класса реальную реализацию интерфейса или как я могу это понять?

Ответы [ 4 ]

3 голосов
/ 02 февраля 2012

Наследование - это is-a отношение.

SecondClass is-a onDragListener.

this is SecondClass.

Ergo,this является onDragListener.

0 голосов
/ 02 февраля 2012

Поскольку ваш SecondClass реализует интерфейс onDragListener, его можно использовать везде, где требуется onDragListener, поскольку он является onDragListener.

Значение this в вызове FirstClass.setOnDragListener (this) является текущим экземпляромSecondClass, который является onDragListener.

0 голосов
/ 02 февраля 2012

setOnDragListener() ожидает, что onDragListener интерфейс будет передан в качестве аргумента.SecondClass реализует onDragListener интерфейс, поэтому вы можете передать this из SecondClass экземпляра в FirstClass.setOnDragListener(), потому что this реализует onDragListener

0 голосов
/ 02 февраля 2012

В этой ситуации вы ссылаетесь на сам объект, который будет реализовывать onDragListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...