Ключевое слово interface осуществляет, дальше, концепцию, реализованную в abstract. Оно позволяет разработчику объявить форму (структуру) класса: поля, косвенно являющиеся static и final (не могут быть изменены реализующим классом), имена методов, списки аргументов, возвращаемые типы, но не содержит тела методов. Можно сказать, что в интерфейсе все методы абстрактные, но слово abstract писать не надо. Константы всегда статические, но слова static и final указывать не нужно. Т.о. интерфейсы похожи на классы, но в отличие от последних у интерфейсов нет переменных представителей, а в объявлениях методов отсутствует реализация. Ключевое слово interface полностью освобождает класс от его реализации. Интерфейсы Java созданы для поддержки динамического выбора методов во время выполнения программы. Для каждого интерфейса должен существовать класс его реализующий. Этот класс, должен иметь полный набор public методовопределенных интерфейсом. После определения интерфейса реализовать его может любое число классов. И наоборот, класс может реализовывать любое число интерфейсов.
Реализация интерфейса может быть неполной, некоторые методы интерфейса реализованы, а другие — нет. Такая реализация — абстрактный класс, его обязательно надо пометить модификатором abstract.
Для создания интерфейса надо вместо ключевого слова class использовать слово interface. Общая форма объявления интерфейса имеет вид:
[public] interface имя{
type var_name_1 = значение;
…
type var_nameN = значение;
возвращаемый_тип metod1(список_параметров);
…
возвращаемый_тип metodM(список_параметров);
}
Если в объявлении интерфейса используется ключевое слово public (если этот интерфейс определен в файле с тем же именем), интерфейс может использоваться любым другим классом. Иначе, он доступен только классам членам пакета, в котором он объявлен.