- •Интерфейсы
- •Цели занятия
- •Понятие интерфейса
- •Понятие интерфейса
- •Понятие интерфейса
- •Примеры интерфейсов
- •Примеры интерфейсов
- •Понятие интерфейса
- •Понятие интерфейса
- •Понятие интерфейса
- •Объявление интерфейса
- •Константы в интерфейсах
- •Константы в интерфейсах
- •Методы в интерфейсах
- •Наследование и сокрытие
- •Наследование и сокрытие
- •Наследование и сокрытие
- •Наследование и сокрытие
- •Наследование и сокрытие
- •Наследование, переопределение
- •Наследование, переопределение
- •Пустые интерфейсы
- •Абстрактный класс или
- •Литература
Интерфейсы
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Цели занятия
2 Изучить:
•Понятие интерфейса
•Объявление интерфейса
• Константы в интерфейсах
•Методы в интерфейсах
•Модификаторы в объявлениях интерфейсов
•Расширение интерфейсов
•Наследование и сокрытие констант
•Наследование, переопределение и перегрузка методов
•Пустые интерфейсы
•Отличия абстрактного класса от интерфейса
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие интерфейса
3• Интерфейс позволяет описать тип в абстрактной форме – в виде набора заголовков методов и
объявлений констант, которые образуют контракт типа
•Интерфейс не содержит блоков реализации – его экземпляры создавать нельзя
•Эта возможность предоставляется производным классам, которые способны реализовать один или несколько интерфейсов
•Интерфейс – это образец чистой формы, а класс – сочетание формы (дизайна) и содержания (реализации)
•Класс способен реализовать более одного интерфейса
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие интерфейса
4• Java допускает возможность множественного
наследования интерфейсов и единичного наследования реализации – классу позволено непосредственно
наследовать только один базовый класс
•Все классы, которые расширяются конкретным классом, и все реализуемые им интерфейсы в совокупности называют базовыми типами
•Новый класс – с точки зрения базовых типов – принято называть производный тип
•Производный тип есть любой из унаследованных им базовых типов, поэтому ссылка на объект производного типа может быть полиморфным образом использована в любом контексте, где требуется ссылка на любой из базовых типов (класс или интерфейс)
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие интерфейса
5• Объявление интерфейса создаёт новый тип точно так же, как и объявление класса
•Наименование интерфейса можно употреблять
в качестве имени типа в объявлении любой переменной – и такой переменной допускается присваивать ссылки на объекты соответствующих производных типов
•Интерфейсные типы, реализуемые классом, в его объявлении перечисляются после служебного слова implements (конструкция implements целиком размещается после предложения extends, если таковое имеется, но перед блоком тела класса)
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Примеры интерфейсов
6• Cloneable. Объекты этого типа поддерживают операцию клонирования
•Comparable. Объекты Comparable допускают упорядочение и поэтому могут сравниваться
•Runnable. Соответствующие объекты содержат код, способный выполняться в виде независимого потока вычислений
•Serializable. Объекты этого типа могут быть преобразованы в последовательность байтов с целью сохранения на носителях или переноса в среду другой виртуальной машины, а затем при необходимости восстановлены в исходном «живом» виде
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Примеры интерфейсов
7Пример 1
public interface Comparable { int compareTo(Object o);
}
Пример 2
class Body implements Comparable {
int orbitalDistance = …; // Задаётся в процессе конструирования
public int compareTo(Object o) { Body other = (Body)o;
if (orbits == other.orbits)
return orbitalDistance – other.orbitalDistance; else
throw new IllegalArgumentException("Неверное значение orbits");
}}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие интерфейса
8• Все указанные в объявлении интерфейсы называют базовыми интерфейсами класса
•Класс обязан обеспечить реализацию всех методов, определённых в унаследованных базовых интерфейсах, иначе в его объявление следует включить модификатор abstract, имея в виду, что конкретной реализацией в будущем «займутся» какие-либо конкретные (неабстрактные) производные классы
•Интерфейсы, как и классы, вводят в обиход новые наименования типов, которые могут быть использованы в объявлениях переменных:
Comparable obj;
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие интерфейса
9• Посредством ссылки на интерфейсный тип, однако, разрешается обращаться только к членам соответствующего интерфейса
Пример 3
Comparable obj = new Body();
String name = obj.getName(); // Неверно
•Если необходимо интерпретировать obj как объект класса Body, следует применить соответствующий оператор преобразования типов
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие интерфейса
10• Существует, правда, единственное исключение из этого правила: ссылку на любой интерфейс позволяется трактовать
как ссылку на объект класса Object, поскольку Object – это базовый класс по отношению ко всем классам и интерфейсам
•Поэтому следующее выражение вполне допустимо:
String desc = obj.toString();
•Здесь ссылка на интерфейсный тип Comparable неявно преобразуется в ссылку на тип Object
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |