Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_5.2.ppt
Скачиваний:
31
Добавлен:
16.03.2015
Размер:
514.05 Кб
Скачать

Вложенные классы и

интерфейсы

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Цели занятия

2 Изучить:

•Статические вложенные классы

•Вложенные интерфейсы

•Нестатические вложенные классы

•Локальные классы

•Анонимные классы

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

 

 

Вложенные классы и

3

 

интерфейсы

Возможность определять вложенные типы, предусмотренная

 

вязыке Java служит нескольким целям:

Вложенные типы позволяют представить тип в виде логически связанных структурных групп и контекстов

Вложенные типы – это простой и эффективный инструмент объединения семантики соотносимых объектов

Вложенные типы считаются частью внешнего типа, и оба типа находятся во взаимно «доверительных» отношениях

– один из них обладает правом обращаться ко всем членам другого

Основные различия между вложенными типами обусловлены тем, является ли вложенный тип классом или интерфейсом, и тем, к какой категории относится внешний тип – к классам или интерфейсам

Вложенные типы могут быть объявлены как статические или нестатические

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Статические вложенные

классы

4• Статический вложенный класс - это простейшая форма вложенного класса, в его объявлении присутствует служебное слово static

Если класс вложен в интерфейс, он получает статус статического по умолчанию, и модификатор static, в соответствии с принятым соглашением, опускается

Статический вложенный класс может наследовать другие классы, реализовывать любые интерфейсы и сам по себе служить объектом расширения для любого класса, обладающего необходимыми правами доступа

В объявлении статического вложенного класса, как и обычного класса, разрешается применять модификаторы final и abstract

Статические классы, вложенные в другой класс, являются членами последнего и допускают применение любых модификаторов доступа

Пример 1

public abstract class ClassA { protected static class ClassB {

// тело класса

}

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Вложенные интерфейсы

5• Вложенные интерфейсы всегда статичны, хотя соответствующий модификатор static, в

соответствии с принятым соглашением, принято опускать

Доступ определяется доступом внешнего класса или интерфейса

Пример 2

public class ClassA {

protected interface InterfaceB { // члены интерфейса

}

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Нестатические вложенные

классы

6• Нестатические вложенные классы называются внутренними классами

Объект внутреннего класса всегда ассоциируется с т.н. внешним объектом (с соответствующим объектом внешнего класса)

Элементы внутреннего класса имеют доступ к полям и методам внешнего объекта

Внутренние классы не способны содержать статические члены, кроме полей вида final static, инициализируемых константами или постоянными выражениями

Внутренние классы, как и обычные, способны расширять любые другие классы, реализовывать интерфейсы и выступать в роли объектов наследования

Вполне допустимо использовать в объявлении внутреннего класса модификаторы final и abstract

Пример 3

public abstract class ClassA { private class ClassB {

// тело класса

}

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Локальные классы

7• Разрешается объявлять вложенные классы внутри блоков кода, таких как тело метода, конструктор или блок инициализации

Подобный локальный внутренний класс не является членом класса, к которому относится блок, а принадлежит самому блоку – точно так же, как обычная локальная переменная

Такие классы недоступны за пределами внешнего класса, т.к. не сущестует способов обращения к ним, но их экземпляры – это обычные объекты, которые позволяется передавать в качестве аргументов или возвращать из методов

Единственный модификатор, который допускается применять в объявлении локального класса, – это final (модификаторы доступа запрещены)

Экземпляры имеют доступ не только к полям и методам внешнего объекта, но и к локальным переменным, но такие переменные должны быть объявлены как

final Пример 4

public class ClassA {

public Iterator iterator() {

class Iter implements Iterator { /* тело класса */ } // действия, выполняемые методом

return new Iter();

}

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Анонимные классы

8• Анонимные классы описываются непосредственно в выражении new и служат его частью

Тип, указанный после new, является базовым для объявляемого анонимного класса

Могут расширять один класс или реализовывать один интерфейс

Явно писать implements или extends нельзя

Не могут иметь конструкторов, так как имя конструктора должно совпадать с именем класса, а в данном случае класс не имеет имени

Параметры, необходимые для создания объекта, передаются конструктору суперкласса

Пример 5

import java.awt.*; import java.applet.*;

public class MyApplet extends Applet { // что-то происходит

public void init() {

Button btn = new Button(“OK”); add(btn);

btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { ((Button)e.getSource()).setLabel(“! OK”); }

});

} }

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Литература

9• Арнольд Кен, Гослинг Джеймс, Холмс Дэвид. Язык программирования Java. 3-е изд.: Пер. с

англ. – М.: Издательский дом «Вильямс», 2001. –

624 с.: ил. ISBN 5-8459-0215-0 (рус.).

Хорстманн Кей С., Корнелл Гари. Java 2. Библиотека профессионала, том 1. Основы. 8-е издание.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2008. – 816 с.: ил. ISBN 978-5-8459-1378-4 (рус.).

Вязовик Н.А. Программирование на Java – М.: Интернет-Ун-т Информ. Технологий, 2003.

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java