Читайте также: |
|
Класс Расширяет класс
Реализует интерфейсы Наследование как внешнего контракта, так и реализации
Интерфейс
Расширяет интерфейсы Наследование ТОЛЬКО внешнего контракта
Объявление интерфейсов:
interface Somethingable {
// константы
// методы
// вложенные классы и интерфейсы
}
1. Все члены интерфейса по умолчанию обладают признаком public
2. Применение других модификаторов редко имеет смысл
3. Бывают пустые интерфейсы
Константы в интерфейсах:
interface Verbose {
int SILENT = 0;
int TERSE = 1;
int NORMAL = 2;
int VERBOSE = 3;
}
Имеют неявные модификаторы public static final
Должны быть снабжены инициализаторами
Методы в интерфейсах:
interface Verbose {
void setVerbosity(int level);
int getVerbosity();
}
Имеют неявные модификаторы public abstract
Не могут иметь модификаторов native synchronized strictfp static final
Расширение интерфейсов интерфейсами:
interface NewVerbose extends Verbose, Runnable {
//...
}
Допускается сокрытие констант!
Переопределение метода не несет семантической нагрузки.Совпадение имен наследуемых методов не несет семантической нагрузки.
Реализация интерфейсов классами:
class MyNewThread
extends MyThread
implements Runnable, Verbose {
...
}
1. Интерфейсы реализуются классами
2. Класс может реализовывать несколько интерфейсов
3. Если класс не реализует все методы «наследуемых» интерфейсов, он является абстрактным
4.
Интерфейс или абстрактный класс?
1)Интерфейсы обеспечивают инструментарий множественного наследования, производный класс способен наследовать одновременно несколько интерфейсов.
2)Класс может расширять единственный базовый класс, даже если тот содержит только абстрактные методы.
3)Абстрактный класс частично может быть реализован, он вправе содержать члены, помеченные как protected и/или static и т.п.
4)Структура интерфейса ограничена объявлениями public -констант и public -методов без какой бы то ни было реализации.
Ссылки интерфейсных типов:
1. Допускаются ссылки интерфейсных типов
2. Такая ссылка позволяет выполнять над объектом операции, описанные во внешнем контракте, обусловленном типом интерфейса
3.Такое средство существенно расширяет возможности полиморфизма
Использование типов:
1. Ссылочные типы
2. Неявное приведение
3. Явное приведение
MyNewThread mnt = new MyNewThread();
MyThread mt = mnt;
Runnable r1 = mnt;
Runnable r2 = mt; // Ошибка!!!
mnt = (MyNewThread)mt; // Возможен выброс исключения
mnt = (MyNewThread)r1; // ClassCastException
Пустые интерфейсы:
1. Существуют пустые интерфейсы, объявления которых не содержат ни констант, ни методов
2. Реализация таких интерфейсов обычно означает способность объекта к чему-либо
3. Ссылка такого типа редко имеет смысл (т.к. внешний контракт пуст)
4. Даже такая ссылка позволяет выполнять методы объекта…а именно методы, объявленные в классе Object, поскольку они есть у абсолютно любого объекта
Дата добавления: 2015-09-11; просмотров: 117 | Поможем написать вашу работу | Нарушение авторских прав |