Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемМарфа Руделева
1 1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ
2 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса В Java два вида интерфейсов: интерфейсы, определяющие контракт для классов посредством методов, интерфейсы, реализация которых автоматически (без реализации методов) придает классу определенные свойства. example01 : объявление интерфейсов: LineGroup.java, Shape.java interface ИмяИнтерфейса [extends ИмяИнтерфейса1]{ тип Поле = ЗНАЧЕНИЕ; тип метод(); } Все объявленные в интерфейсе поля автоматически трактуются как public, static и final Все объявленные в интерфейсе методы автоматически трактуются как public и abstract
3 3 Реализация интерфейсов классом Класс может реализовывать любое число интерфейсов Класс обязан реализовать все методы, полученные от интерфейсов, или объявить себя абстрактным классом. example02 : реализация интерфейса: Rectangle.java Circle.java Triangle.java Runner.java example06 : динамический связывание методов : ShapeCreator.java [доступ] class ИмяКласса implements Имя1, Имя2,…, ИмяN { /*код класса*/ }
4 4 Внутренние классы В Java можно определить (вложить) один класс внутри определения другого класса, что позволяет группировать классы, логически связанные друг с другом, и динамично управлять доступом к ним. Цели создания внутренних классов: способ сокрытия реализации использование в качестве блоков прослушивания событий возможность независимого наследования внутренними классами Внутренние классы бывают: статические, вложенные (nested) нестатические, внутренние (inner)
5 5 Пример применения внутренних классов public Ship protected Engine public static Boat Запустить «Двигатель» можно только посредством использования объекта «Корабль» Класс «Шлюпка» также является логической частью класса «Корабль», однако данные объекты могут быть использованы независимо от наличия объекта «Корабль»
6 6 Внутренние (inner) классы Нестатические вложенные классы Объект внутреннего класса всегда ассоциируется (скрыто хранит ссылку) с создавшим его объектом внешнего класса – внешним (enclosing) объектом. Методы внутреннего класса имеют прямой доступ ко всем полям и методам внешнего класса. Доступ к элементам внутреннего класса возможен из внешнего класса только через объект внутреннего класса Внутренние классы не могут содержать статические атрибуты и методы, кроме констант (final static). После компиляции объектный модуль, соответствующий внутреннему классу, получит имя Владелец$Внутренний.class. example07 : внутренние (inner) классы : Ship.java Runner.java
7 7 Inner- классы и наследование public class WarShip extends Ship { protected class SpecialEngine extends Engine {} } public class Motor extends Ship.Engine { public Motor(Ship obj) { obj.super(); } конструктор класса Motor должен быть объявлен с параметром типа Ship, что позволит получить доступ к ссылке на внутренний класс Engine, наследуемый классом Motor. Внутренние классы имеют право наследовать другие классы, реализовывать интерфейсы и выступать в роли объектов наследования. Если внутренний класс наследуется обычным образом другим классом, то он теряет доступ к полям своего внешнего класса, в котором он был объявлен. example08
8 8 Модификаторы спецификации Inner-классов final abstract private protected public example11 : взаимодействие внешнего и внутреннего классов : Student.java, AnySession.java
9 9 Объявление внутри метода Внутренний класс может быть объявлен также внутри метода или логического блока внешнего класса. Видимость такого класса регулируется областью видимости блока, в котором он объявлен. Внутренний класс сохраняет доступ ко всем полям и методам внешнего класса константам, объявленным в текущем блоке кода Класс, объявленный внутри метода, НЕ МОЖЕТ быть объявлен как static содержать статические поля и методы example12 : внутренний класс, объявленный внутри метода TeacherLogic.java
10 10 Вложенные (nested) классы При объявлении такого внутреннего класса присутствует служебное слово static, и такой класс называется вложенным (nested). Вложенный класс способен наследовать другие классы, реализовывать интерфейсы являться объектом наследования для любого класса, обладающего необходимыми правами доступа. Статический вложенный класс напрямую имеет доступ только к статическим полям и методам внешнего класса, для доступа к нестатическим членам и методам внешнего класса должен создавать объект внешнего класса Подкласс вложенного класса не способен унаследовать возможность доступа к членам внешнего класса, которыми наделен его суперкласс example13 : вложенный класс: Ship.java, RunnerShip.java example14 : класс вложенный в интерфейс: Faculty.java, University.java
11 11 Анонимные (anonymous) классы Анонимные (безымянные) классы применяются для придания уникальной функциональности отдельно взятому объекту обработки событий, реализации блоков прослушивания и т.д. Объявление анонимного класса выполняется одновременно с созданием его объекта посредством оператора new. Анонимные классы эффективно используются, как правило, для реализации (переопределения) нескольких методов и создания собственных методов объекта. Конструкторы анонимных классов нельзя определять и переопределять. Анонимные классы допускают вложенность друг в друга, что может сильно запутать код и сделать эти конструкции непонятными. example15 : анонимные классы: TypeQuest.java, RunnerAnonym.java
12 12 Классы внутри интерфейсов interface ИмяИнтерфейса [extends ИмяИнтерфейса1]{ тип Поле = ЗНАЧЕНИЕ; тип метод(); [спецификаторы]class ИмяКласса [extends …][implements …]{ /* реализация класса */ } Все объявленные в интерфейсе классы автоматически трактуются как public и static example16 класс внутри интерфейса InInterface.java Интерфейсы тоже могут быть внутренними, пример: Map.Entry описывает пару ключ-значение ассоциативного словаря
13 13 Ключевые моменты
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.