Вложенные и внутренние классы
В Java определены вложенные классы. Вложенным называется такой класс, который объявляется в другом классе.
Вложенный класс не может существовать независимо от класса, в который он вложен. Следовательно, область действия вложенного класса ограничена его внешним классом. Если вложенный класс объявлен в пределах области действия внешнего класса, то он становится членом последнего. Имеется также возможность объявить вложенный класс, который станет локальным в пределах блока
Существуют два типа вложенных классов. Одни вложенные классы объявляются с помощью модификатора доступа static, а другие - без него. Нестатический вариант вложенных классов называются внутренними.
Внутренние классы позволяют вам группировать классы, логически принадлежащие друг другу, и управлять доступом к ним. Однако важно понимать, что внутренние классы заметно отличаются от композиции.
Внутренний класс может взаимодействовать со своим внешним классом, а код, написанный с использованием внутренних классов, получается более элегантным и понятным.
Создание внутренних классов
Создать внутренний класс несложно - достаточно разместить определение класса внутри окружающего класса.
public class Main {
public static void main(String[] args) {
Parcel parcel = new Parcel();
parcel.ship("Лимпопо");
}
}
class Parcel {
class Contents {
private int i = 11;
public int value() {return i;}
}
class Destination {
private String label;
public Destination(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
public void ship(String destination) {
Contents c = new Contents();
Destination d = new Destination(destination);
System.out.println(d.getLabel());
}
}Внутренний класс имеет доступ ко всем переменным и методам внешнего класса, в который он вложен, и может обращаться к ним непосредственно, как и все остальные нестатические члены внешнего класса.
Иногда внутренний класс используется для предоставления ряда услуг внешнему классу, в котором он содержится.
Класс можно вложить в область действия блока. В итоге получается локальный класс, недоступный за пределами блока.
Также внутренний класс можно быть анонимным классом (анонимные классы уже были рассмотрены ранее).
Last updated
Was this helpful?