
- •1.Конструктор копирования
- •2.Перегрузка переопределение функц
- •3.Перегрузка бинарных операторов
- •4.Перегрузка унарных операторов
- •5.Static- и Const- компоненты класса
- •6.Организация внешн.Доступа к лок.Комп. Класса(Спецификатор friend)
- •7.Proxi-классы
- •8.Наследование простое
- •9.Множественное наследование
- •10.Виртуальные функции
- •11.Абстрактные классы
- •13.Шаблоны.Параметрезированные классы
- •12.Виртуальный деструктор
- •14.Совместное использование шаблонов и наследование
- •15.Реализация smart-указателя
- •16.Классы поддерживающие транзакцию
- •17.Преобразование типа.Явное преобразование типа
- •18.Преобразование типов определённых в программе
- •20.Строковые потоки,их свойства,назначение.
- •22.Организация файла последовательного доступа
- •24.Генерация исключений в конструкторах.Иерархия искл.В станд.Библиотеке
- •23.Организация файла произвольного доступа
- •25. Спецификации исключительных ситуаций
- •27. Исключительные ситуации.Основы обработки исключительных ситуаций
- •28. Задание собственного неожиданного обработчика
- •29. Исключительная ситуация, генерируемая оператором new
- •30. Перенаправление исключительных ситуаций
- •31.Категории итераторов.Основные итераторы
- •32. Категории итераторов.Основные итераторы
- •33.Пасивные и активные итераторы
- •34. Контейнеры последовательностей
- •35.Ассоциативные контейнеры
- •36.Адаптеры контейнеров
- •37.Патеррн (Абстрактная фабрика)
- •38.Патеррн (Строитель)
- •39. Патеррн (Адаптер)
- •40.Патеррн (Команда)
- •41.Спецификатор final в java
- •42.Вложенные и внутренние классы в java
- •43.Основы наследования в java
- •47.Абстрактные классы в java
- •44.Использование ключевого слова super в java
- •50.Интерфейсы в java
- •51.Множественное наследование в java
- •52.Конфликты имён при комбинировании интерфейсов в java
- •53.Расширение интерфейса в java
- •54. Исключительные ситуации. Обработка исключений java
50.Интерфейсы в java
Интерфейсы подобны полностью абстрактным классам, но не являются классами. Ни один из объявленных методов не может быть реализован
внутри интерфейса. В языке Java существуют два вида интерфейсов: интерфейсы, определяющие контракт для классов посредством методов, и интерфейсы, реализация которых автоматически (без реализации методов) придает классу определенные свойства. К последним относятся, например, интерфейсы Cloneable и Serializable, отвечающие за клонирование и сохранение объекта в информационном потоке соответственно.
Все объявленные в интерфейсе методы автоматически трактуются как public и abstract, а все поля – как public, static и final, даже если они так не объявлены. Класс может реализовывать любое число интерфейсов, указываемых через запятую после ключевого слова implements, дополняющего определение класса. После этого класс обязан реализовать все методы, полученные им от интерфейсов, или объявить себя абстрактным классом.
На множестве интерфейсов также определена иерархия наследования, но она не имеет отношения к иерархии классов.
Определение интерфейса имеет вид:
[public] interface Имя [extends Имя1, Имя2,…, ИмяN] {
/*реализация интерфейса*/}
51.Множественное наследование в java
Java не поддерживает множественное наследование реализаций (классов). Это объясняется тем, что такое наследование порождает некоторые проблемы. Чаще всего указываются неоднозначности, возникающие при так называемом «ромбовидном» наследовании, когда один класс “A” является наследником двух других классов “B” и ”C”, причем и тот и другой наследуют класс “D”.
Вместо множественного наследования классов в Java введено множественное наследование интерфейсов, при котором, как утверждается, никаких проблем не возникает.
52.Конфликты имён при комбинировании интерфейсов в java
53.Расширение интерфейса в java
Интерфейсы допускают расширение; в этом случае в объявлении производного интерфейса используется служебное слово extends. Интерфейсы, в отличие от классов, способны расширять более одного интерфейса:
public interface SerializableRunnable
extends java.io.serializable, Runnable
{
// …
}
Интерфейс SerializableRunnable одновременно наследует интерфейсы java.io.Serializable и Runnable. Это означает, что все методы и константы, определенные в каждом унаследованном интерфейсе, становятся, наряду с собственными методами и константами, частью контракта нового интерфейса SerializableRunnablе. Наследуемые интерфейсы называют базовыми (superinterfaces) по отношению к новому интерфейсу, который, в свою очередь, является производным (subinterface), или расширенным,интерфейсом относительно базовых.
Поскольку интерфейсы поддерживают модель множественного наследования, граф, представляющий соответствующую иерархию типов, способен содержать целый ряд циклов или путей, имеющих отношение к одному и тому же базовому интерфейсу. Это значит, что доступ к константам и методам базового интерфейса Может быть получен несколькими способами. Однако, поскольку интерфейсы не содержат блоков реализации и полей экземпляров, модель множественного наследования в этом случае не таит в себе каких бы то ни было "подводных камней".