четверг, 3 июля 2014 г.

Интерфейс

Интерфейс — это сущность с простым перечнем неких методов, выглядящая как класс, которую можно подключить к реальному классу, где эти методы будут уже реализовываться в коде. Будучи подключенным к разным классам, интерфейс определяет одинаковые имена для своих методов, которые в этих классах нужно будет реализовать (прописать их код). То есть, получается одинаковый интерфейс взаимодействия со всеми классами, к которым подключен этот интерфейс.

Благодаря такой конструкции возникает дополнительная возможность обращаться к этим методам, реализованным в разных классах, через переменную одного и того же типа (тип переменной —конкретный интерфейс), а не через разные имена классов, в которых эти методы реализованы. Разумеется, предварительно нужно присвоить нужный класс этой переменной. При этом в переменную попадает только та часть класса, которая объявлена этим интерфейсом.

Практически это выглядит следующим образом:
  1. Описывается интерфейс, в котором, как в классе, перечисляются все нужные нам методы, но с пустыми телами, без кода.
  2. Описывается класс, к которому специальной языковой конструкцией подключают интерфейс, и в этом классе прописывают реализацию описанных в интерфейсе методов.
  3. В другом классе объявляется переменная, тип которой обозначается в виде имени описанного выше интерфейса. То есть тип — наш интерфейс.
  4. Этой переменной присваивается класс, к которому выше был подключен интерфейс. Переменная становится мостиком к методам интерфейса, описанным в классе.
Теперь мы можем присваивать этой переменной любой класс, к которому подключен соответствующий интерфейс, и вызывать методы этого класса.

В Java это выглядит примерно так. В смысл кода особенно не вникайте, он максимально сокращён. Продемонстрированы всего лишь языковые конструкции:

Пункт 1:

public interface onItemClickListener {
    public void itemClick(int position);
}

Пункт 2:

public class Activity1 implements onItemClickListener {

    int position = 0;

    public void itemClick(int position) {
        this.position = position;
    }
}

Пункты 3 и 4:

public class Activity2 {

    onItemClickListener listener;

    public void onAttach(Activity activity) {
        listener = (onItemClickListener) activity;
    }

    public void onListItemClick(ListView l, View v, int position, long id) {
        listener.itemClick(position);
    }
}

Комментариев нет:

Отправить комментарий