Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
85
Добавлен:
08.06.2015
Размер:
841.73 Кб
Скачать

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

Называются внутренними классами

Тип находится в контексте объекта

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

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

Это позволяет создавать семейства сильно связанных объектов

51

Пример внутреннего класса

class ClassA { private int a = 10;

protected class ClassB { private int b = 15;

public int getA() { return a; } public int getB() { return b; }

}

public ClassB getB() { return new ClassB(); } public void setB(int b, ClassB obj) { obj.b = b; }

}

public class Test {

public static void main(String[] args) {

ClassA objA = new ClassA();

ClassA.ClassB objB = objA.getB(); objA.setB(20, objB);

System.out.println(objB.getA() + " " + objB.getB());

}

}

52

И ещё один пример

class ClassA implements Serializable {

private ClassB[] arr = new ClassB[10];

{

for(int i = 0; i < 10; i++) { arr[i] = new ClassB(); arr[i].a = i + 65;

}

}

public Interface getB(int index) { return arr[index]; }

private class ClassB implements Interface { private int a;

public int getA() { return a; }

}

}

interface Interface extends Serializable { int getA(); }

53

И его результат…

public class Test {

public static void main(String[] args) throws Exception { ClassA objA = new ClassA();

Interface objB = objA.getB(5);

ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("test.bin"));

out.writeObject(objB);

out.close();

}

}

¬н sr ClassA$ClassBиeТнwјЛ☻ ☻I aL this$0t LClassA;xp

Fsr ClassAhќЯѓэЄрЈ ☻ ☺[arrt [LClassA$ClassB;xpur

 

[LClassA$ClassB;єВ2 т|Ў xp sq ~

Aq ~ sq ~

Bq ~

sq ~

Cq ~ sq ~

Dq ~ sq ~

Eq ~ q ~ sq ~

 

Gq ~ sq ~

Hq ~ sq ~

Iq ~ sq ~

Jq ~

 

54

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

Описываются в теле блока

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

Экземпляры имеют доступ к локальным переменным, снабженным модификатором final

public class ClassA {

public Iterator iterator() { class Iter implements Iterator {

...

}

...

return new Iter();

}

...

}

55

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

 

class A { protected char a = 'a'; }

 

 

 

 

class B { protected char b = 'b'; }

 

 

 

 

public class C extends A {

 

 

 

 

private char c = 'c';

 

 

 

 

public static char d = 'd';

 

 

 

 

public void createLocalObject(final char e)

 

 

 

 

{

 

 

 

 

 

final char f = 'f';

 

 

 

 

class Local extends B

 

 

 

 

{

char g = 'g';

 

 

 

 

 

 

 

 

 

 

public void printVars()

 

 

 

 

 

{

 

 

 

 

 

System.out.println(g + "," + f + "," + e); // local

 

 

 

 

System.out.println(d + "," + c);

// outer

 

 

 

}

} System.out.println(b + "," + a);

// inherited

 

 

 

} } new Local().printVars();

 

 

 

 

 

 

 

 

 

 

 

 

56

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

Описываются непосредственно в выражении new и служат его частью

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

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

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

Не могут иметь конструкторов

57

Пример анонимного класса

import java.awt.*; import javax.swing.*;

public class MyApplet extends JApplet {

...

public void init() {

JButton btn = new JButton("?"); getContentPane().add(btn); btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { ((JButton)e.getSource()).setText("!");

}

});

}

}

58

Спасибо за внимание!

Дополнительные источники

Хорстманн, К. Java 2. Библиотека профессионала. Том 2. Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 992 с.

Дейтел, Х.М. Технологии программирования на Java 2. Книга 1. Графика, JavaBeans, интерфейс пользователя [Текст] / Х.М. Дейтел, П.Дж. Дейтел, С.И. Сантари. – М. : Бином- пресс, 2003. – 560 с.

JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html , дата доступа: 21.10.2011.

JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html , дата доступа: 21.10.2011.

JavaSE Desktop technologies [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html , дата доступа: 21.10.2011.

Trial: JavaBeans [Электронный ресурс]. – Режим доступа: http://download.oracle.com/javase/tutorial/javabeans/ , дата доступа: 21.10.2011.