Вложенные классы
Вложенные классы — это классы, объявленные внутри другого класса. Ранее мы создавали каждый класс в отдельном файле. Вложенные классы позволяют разместить один класс внутри другого, в одном файле.
Зачем нужны вложенные классы?
Рассмотрим пример: класс Компьютер, содержащий Процессор и RAM память. Эти компоненты неотъемлемо связаны с компьютером, поэтому логично разместить их классы внутри класса Компьютер. Это отличается от отношения между классами Человек и Студент, где связь менее тесная.
class Компьютер {
private class Процессор {
private boolean isStart = false;
public void Start() {
isStart = true;
}
public void Shutdown() {
isStart = false;
}
}
private class Ram {
private boolean isStart = false;
public void Start() {
isStart = true;
}
public void Shutdown() {
isStart = false;
}
}
public static void main(String[] args) {
Компьютер comp = new Компьютер();
Процессор i7 = comp.new Процессор();
Ram transfer = comp.new Ram();
i7.Start();
transfer.Start();
System.out.println("i7.isStart = " + i7.isStart);
transfer.Shutdown();
System.out.println("transfer.isStart = " + transfer.isStart);
}
}
Переменные isStart объявлены как private. Доступ к ним осуществляется только через методы класса. Это предотвращает прямое изменение состояния процессора или памяти извне класса Компьютер.
Мы создаем объекты классов Процессор и RAM внутри класса Компьютер и используем их методы для управления состоянием компонентов. Это демонстрирует принцип инкапсуляции и улучшает организацию кода.
Анонимные классы
Использование анонимных классов оправдано, когда:
- Тело класса очень короткое.
- Необходим только один экземпляр класса.
- Класс используется в месте своего создания или сразу после.
- Имя класса не важно и не улучшает читаемость кода.
Анонимные классы не имеют имени. Они объявляются и создаются одновременно.
new Компьютер() {
public void superCom() {
this.i7.Start();
this.transfer.Start();
}
};
В данном примере создается анонимный класс, и сразу же создается его объект. В нем содержится один метод superCom, который вызывает методы Start у объектов i7 и transfer. Это удобно для кратких классов одноразового использования. Обратите внимание на точку с запятой после закрывающей фигурной скобки.
Вложенные и анонимные классы — гибкие инструменты для организации кода в Java. Выбор между ними зависит от контекста и сложности задачи. Вложенные классы полезны для организации логически связанных компонентов, а анонимные — для кратких, одноразовых классов.
(Примечание: В примере кода используются кириллические имена классов и методов. Для большей читаемости и соответствия стандартам Java рекомендуется использовать латинские названия.)