
Лекции Java / 04. Исключительные ситуации и их обработка. Наследование и его особенности.pptx
.pdf
Абстрактные классы и методы
nАбстрактные методы описывают сигнатуру без реализации
abstract public int getValue();
nКласс с абстрактными методами обязан быть абстрактным
abstract class MyClass {...}
nРасширяющий класс может перекрыть своими абстрактными родительские реализованные методы
nАбстрактный класс не обязан иметь абстрактные методы
nСоздавать объекты абстрактных типов нельзя!
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
41 |

Понятие интерфейса
nПозволяет описать тип в полностью абстрактной форме
nЭкземпляры интерфейсов создавать нельзя
nРеализация классом интерфейса означает согласие класса на внешний контракт, описываемый реализуемым интерфейсом
nКлассы способны реализовывать один или несколько интерфейсов
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
42 |

Объявление интерфейсов
interface Somethingable {
//константы
//методы
//вложенные классы и интерфейсы
}
nВсе члены интерфейса по умолчанию обладают признаком public
nПрименение других модификаторов редко имеет смысл
nБывают пустые интерфейсы
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
43 |

Константы в интерфейсах
interface Verbose { int SILENT = 0; int TERSE = 1; int NORMAL = 2; int VERBOSE = 3;
}
nИмеют неявные модификаторы public static final
nДолжны быть снабжены инициализаторами
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
44 |

Методы в интерфейсах
interface Verbose {
void setVerbosity(int level); int getVerbosity();
}
nИмеют неявные модификаторы public abstract
nНе могут иметь модификаторов native synchronized strictfp static final
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
45 |

Расширение интерфейсов интерфейсами
interface NewVerbose extends Verbose, Runnable { // ...
}
nДопускается сокрытие констант
nПереопределение метода не несет семантической нагрузки
nСовпадение имен наследуемых методов не несет семантической нагрузки
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
46 |

Реализация интерфейсов классами
class MyNewThread extends MyThread
implements Runnable, Verbose {
...
}
nИнтерфейсы реализуются классами
nКласс может реализовывать несколько интерфейсов
nЕсли класс не реализует все методы «наследуемых» интерфейсов, он является абстрактным
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
47 |

Интерфейс или абстрактный класс?
nИнтерфейсы обеспечивают инструментарий безопасного множественного наследования, производный класс способен наследовать одновременно несколько интерфейсов
nКласс может расширять единственный базовый класс, даже если тот содержит только абстрактные методы
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
48 |

Интерфейс или абстрактный класс?
nАбстрактный класс частично может быть реализован, он вправе содержать члены, помеченные как protected и/или static и т.п.
nСтруктура интерфейса ограничена объявлениями public-констант и public-методов без какой бы то ни было реализации
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
49 |

Ссылки интерфейсных типов
nДопускаются ссылки интерфейсных типов
nТакая ссылка позволяет выполнять над объектом операции, описанные во
внешнем контракте, обусловленном типом интерфейса
nТакое средство существенно расширяет возможности полиморфизма и полиморфного принципа открытости/ закрытости
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
50 |