В данном уроке мы еще больше приблизимся к пониманию основ ООП. Класс, который находится внутри другого класса, называется вложенным. Для чего это может быть нужно? Вкладывая один класс в другой вы можете показывать отношение агрегации. Например у нас есть компьютер, который состоит из процессора и оперативной памяти:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class Computer {
class Processor {
private boolean isStart = false;
public void start() {
isStart = true;
}
public void shutdown() {
isStart = false;
}
}
class RAM {
private boolean isStart = false;
public void start() {
isStart = true;
}
public void shutdown() {
isStart = false;
}
}
Processor i5 = new Processor();//экземпляр процессора
RAM kingstone = new RAM();//экземпляр оперативной памяти
}
|
Так как компьютер действительно состоит из оперативной памяти и процессора, то оба этих классах находятся внутри класса компьютер, при этом мы создали экземпляры Proccessor и RAM. Для обращения к ним следует использовать точку после имени основного класса:
1
2
3
|
Computer computer = new Computer();
computer.i5.start();
computer.kingstone.start();
|
Кроме того, что класс можно объявить внутри фигурных скобок основного класса, его можно написать внутри метода, тогда он будет виден только в нем.
Одним из примеров таких классов могут служить анонимные классы. Анонимный класс — это класс, не имеющий имени. Он применяется только если нужно создать такой класс, который будет применяться один раз в программе. Хорошим примером такого класса может служить какой — нить обработчик события.
Для того, чтобы создать объект анонимного класса необходимо вызвать конструктор его суперкласса, а затем в фигурных скобках переопределить методы и поля, которые необходимы для него.
Допустим у вас на работе появился один супер компьютер. Он такой один и таких скорей всего больше не будет, тогда можно создать его как анонимный класс:
1
2
3
4
5
6
|
new Computer(){
void superStart(){//новый метод
this.i5.start();
this.kingstone.start();
}
};
|
Более подробно об использовании и применении анонимных классов мы поговорим позднее.
|