Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры(ооп) кроме 45,46,52.docx
Скачиваний:
2
Добавлен:
24.09.2019
Размер:
117.21 Кб
Скачать

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), или расширенным,интерфейсом относительно базовых.

Поскольку интерфейсы поддерживают модель множественного наследования, граф, представляющий соответствующую иерархию типов, способен содержать целый ряд циклов или путей, имеющих отношение к одному и тому же базовому интерфейсу. Это значит, что доступ к константам и методам базового интерфейса Может быть получен несколькими способами. Однако, поскольку интерфейсы не содержат блоков реализации и полей экземпляров, модель множественного наследования в этом случае не таит в себе каких бы то ни было "подводных камней".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]