Внутренний класс
Внутренний класс (inner class) - это класс, который объявляется внутри другого класса. Такой класс имеет доступ ко всем полям и методам внешнего класса, включая приватные, и позволяет логически группировать связанные классы. Для создания экземпляра внутреннего класса сначала нужен объект внешнего класса, так как внутренний класс привязан к его экземпляру.
Внутренние классы делятся на несколько видов:
нестатические внутренние классы, статические
вложенные классы, локальные классы и анонимные
классы. В этой статье рассмотрим нестатический
внутренний класс, который объявляется без
ключевого слова static.
Синтаксис
class OuterClass
{
class InnerClass
{
// body of inner class
}
}
Создание экземпляра внутреннего класса:
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
Пример
Давайте создадим внешний класс Outer
с полем и внутренний класс Inner,
который выводит значение этого поля:
public class Main
{
public static void main(String[] args)
{
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
}
}
class Outer
{
private String message = "abcde";
class Inner
{
public void show()
{
System.out.println(message);
}
}
}
Результат выполнения кода:
"abcde"
Пример
Внутренний класс может обращаться к приватному полю внешнего класса и изменять его. Давайте увеличим значение счётчика:
public class Main
{
public static void main(String[] args)
{
Counter counter = new Counter();
Counter.Incrementer inc = counter.new Incrementer();
inc.increment();
inc.increment();
System.out.println(counter.getValue());
}
}
class Counter
{
private int count = 0;
public int getValue()
{
return count;
}
class Incrementer
{
public void increment()
{
count++;
}
}
}
Результат выполнения кода:
2
Пример
Внутренний класс может быть создан внутри метода внешнего класса. Давайте посмотрим на пример с локальным внутренним классом:
public class Main
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.run();
}
}
class Outer
{
public void run()
{
class Local
{
public void print()
{
System.out.println("12345");
}
}
Local local = new Local();
local.print();
}
}
Результат выполнения кода:
"12345"
Смотрите также
-
класс
static nested,
который является статическим вложенным классом -
класс
anonymous,
который является анонимным классом -
класс
local class,
который объявляется внутри метода -
ключевое слово
static,
которое делает вложенный класс статическим