Top.Mail.Ru

Перечень уроков по Java

27, Интерфейсы

Интерфейс это класс, в котором все методы абстрактные, а все поля являются статическими константами.

 

Другие определения интерфейса

 Интерфейсы - это те же самые абстрактные классы, не содержащие объявлений  полей данных и обычных методов.

Основное отличие интерфейса от абстрактного класса заключается в том, что производный класс может наследовать одновременно несколько интерфейсов.

Интерфейс описывает задачи, который должен решить  класс, но не определяет способа их реализации. 

Интерфейс — это эскиз. В нем указано, что делать, но не указано, как это делать.

 

 Объявление интерфейсов

Объявление интерфейсов похоже на  объявление классов. Вот особенности. Объявление начинается с заголовка. Сначала указываются модификаторы: public или abstract (остальные не имеют смысла), далее ключевое слово interface  и имя интерфейса.

Интерфейс может быть объявлен как  public, и тогда он будет доступен для общего использования, либо модификатор доступа может не указываться, в этом случае интерфейс доступен только для типов своего пакета. Модификатор abstract для интерфейса не требуется, поскольку все интерфейсы являются абстрактными классами.

 

Вот формат

public interface <имя интерфейса>

{

тело интерфейса (код интерфейса) состоит:

поля-константы

абстрактные методы

}

 

Тело интерфейса состоит из объявления полей-констант и абстрактных методов. Все поля интерфейса по умолчанию являются public final static, так что эти модификаторы указывать необязательно и даже нежелательно, чтобы не загромождать код.

Особенности:

  • Поскольку поля являются финальными, необходимо их сразу  инициализировать.
  • Все методы интерфейса являются public  abstract и эти модификаторы также необязательны.

 

Пример.

public interface Move

{

int x=1;

int y=1;

void moveX();

void moveY();

}

Основные свойства интерфейса:

  • Интерфейс (interface), в отличие от класса, может  содержать  только статические константы и заголовки методов, без их реализации.
  • В наследуемом  классе обязательно требуется переопределить  все методы интерфейса
  • При наследовании интерфейса вместо ключевого слова extends используется ключевое слово implements.
  • Интерфейсы поддерживают множественное наследование, поэтому после слова  implements можно перечислить через запятую произвольное количество интерфейсов.

Пример.

public interface Voice {/p>

    void voice();

}

 

public class Dog implements Voice{

void voice()

       System.out.println("Gav-gav!");

   }

}

 

public class Cat implements Voice{

public void voice(){

        System.out.println("Miaou!");

    }

}

 

public class Cow  implements Voice{

public void voice(){

       System.out.println("Mu-u-u!");

    }

}

 

public class InterVoice {

    public static void main(String[] args) {

        Voice [] singer = new Voice[3]; 

    singer[0] = new Dog(); 

    singer[1] = new Cat(); 

    singer[2] = new Cow(); 

    for(int i = 0; i < singer.length; i++)

      singer[i].voice();

    }

}