Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемАнгелина Политова
1 1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ
2 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса В Java два вида интерфейсов: интерфейсы, определяющие контракт для классов посредством методов, интерфейсы, реализация которых автоматически (без реализации методов) придает классу определенные свойства. Все объявленные в интерфейсе методы автоматически трактуются как public и abstract Все поля – как public, static и final Класс может реализовывать любое число интерфейсов, указываемых через запятую после ключевого слова implements, После этого класс обязан реализовать все методы, полученные им от интерфейсов, или объявить себя абстрактным классом. /* пример # 1 : объявление интерфейсов: LineGroup.java, Shape.java */
3 3 Реализация интерфейсов классом При именовании действует негласное соглашение о добавлении к имени интерфейса символа I [доступ] class ИмяКласса implements Имя1, Имя2,…, ИмяN { /*код класса*/} /* пример # 2 : реализация интерфейса: Rectangle.java Circle.java Triangle.java Runner.java */ /* пример # 6 : динамический связывание методов : ShapeCreator.java */
4 4 Пакеты Любой класс Java относится к определенному пакету, который может быть неименованным (unnamed или default package), если оператор package отсутствует. Оператор package имя, помещаемый в начале исходного программного файла, определяет именованный пакет, т.е. область в пространстве имен классов, где определяются имена классов, содержащихся в этом файле. Действие оператора package указывает на месторасположение файла относительно корневого каталога проекта. Например: package example06; package by.gsu.pm41.example06;
5 5 Механизм использования доменных имен В реальных проектах пакеты часто именуются следующим образом: обратный интернет-адрес производителя программного обеспечения by.gsu далее следует имя проекта, например: chapt05; затем располагаются пакеты, определяющие собственно приложение При создании пакета всегда следует руководствоваться простым правилом: называть его именем простым, но отражающим смысл, логику поведения и функциональность объединенных в нем классов.
6 6 Статический импорт Константы и статические методы класса можно использовать без указания принадлежности к классу import static java.lang.Math.*; Доступ только к одной константе класса или интерфейса System.out.println(2 * PI * radius); import static java.lang.Math.E; import static java.lang.Math.cos;// для одного метода
7 7 Внутренние классы В Java можно определить (вложить) один класс внутри определения другого класса, что позволяет группировать классы, логически связанные друг с другом, и динамично управлять доступом к ним. Цели создания внутренних классов: способ сокрытия реализации использование в качестве блоков прослушивания событий возможность независимого наследования внутренними классами
8 8 Ship Engine protected Boat static public Запустить «Двигатель» можно только посредством использования объекта «Корабль» Таким образом, перед инициализацией объекта внутреннего класса «Двигатель» должен быть создан объект внешнего класса «Корабль». Класс «Шлюпка» также является логической частью класса «Корабль», однако данные объекты могут быть использованы независимо от наличия объекта «Корабль». Объект класса «Шлюпка» только использует имя (на борту) своего внешнего класса.
9 9 Внутренние (inner) классы Нестатические вложенные классы Доступ к элементам внутреннего класса возможен из внешнего класса только через объект внутреннего класса Объект внутреннего класса всегда ассоциируется (скрыто хранит ссылку) с создавшим его объектом внешнего класса – внешним (enclosing) объектом. После компиляции объектный модуль, соответствующий внутреннему классу, получит имя Владелец$Внутренний.class. Методы внутреннего класса имеют прямой доступ ко всем полям и методам внешнего класса. Внутренние классы не могут содержать статические атрибуты и методы, кроме констант (final static). /* пример # 10 : внутренние (inner) классы : Ship.java Runner.java */
10 10 Внутренние классы имеют право наследовать другие классы, реализовывать интерфейсы и выступать в роли объектов наследования. Если внутренний класс наследуется обычным образом другим классом, то он теряет доступ к полям своего внешнего класса, в котором он был объявлен. 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.
11 11 При объявлении внутреннего класса могут использоваться модификаторы final, abstract, private, protected, public. /* пример # 11 : взаимодействие внешнего и внутреннего классов : Student.java : AnySession.java */
12 12 Внутренний класс может быть объявлен также внутри метода или логического блока внешнего класса. Видимость такого класса регулируется областью видимости блока, в котором он объявлен. Внутренний класс сохраняет доступ ко всем полям и методам внешнего класса, а также ко всем константам, объявленным в текущем блоке кода. Класс, объявленный внутри метода, не может быть объявлен как static, а также не может содержать статические поля и методы. /*пример # 12 : внутренний класс, объявленный внутри метода: TeacherLogic.java*/
13 13 Вложенные (nested) классы При объявлении такого внутреннего класса присутствует служебное слово static, и такой класс называется вложенным (nested). Если класс вложен в интерфейс, то он становится статическим по умолчанию. Вложенный класс способен наследовать другие классы, реализовывать интерфейсы являться объектом наследования для любого класса, обладающего необходимыми правами доступа. статический вложенный класс напрямую имеет доступ только к статическим полям и методам внешнего класса, для доступа к нестатическим членам и методам внешнего класса должен создавать объект внешнего класса Подкласс вложенного класса не способен унаследовать возможность доступа к членам внешнего класса, которыми наделен его суперкласс /* пример # 13 : вложенный класс: Ship.java : RunnerShip.java */ /* пример # 14 : класс вложенный в интерфейс: Faculty.java : University.java */
14 14 Анонимные (anonymous) классы Анонимные (безымянные) классы применяются для придания уникальной функциональности отдельно взятому объекту обработки событий, реализации блоков прослушивания и т.д. Объявление анонимного класса выполняется одновременно с созданием его объекта посредством оператора new. Анонимные классы эффективно используются, как правило, для реализации (переопределения) нескольких методов и создания собственных методов объекта. Конструкторы анонимных классов нельзя определять и переопределять. Анонимные классы допускают вложенность друг в друга, что может сильно запутать код и сделать эти конструкции непонятными. /* пример # 15 : анонимные классы: TypeQuest.java: RunnerAnonym.java */
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.