Это 18-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
В Java класс может быть определен внутри другого класса, такой класс называется вложенным классом. Они позволяют логически группировать классы, которые используются только в одном месте, увеличивая использование инкапсуляции и создавая более читаемый и удобный для сопровождения код.
-
Область действия вложенного класса ограничена областью действия окружающего его класса.
-
Вложенные классы могут обращаться к членам вложенного класса, включая закрытые члены. Однако обратное неверно, т. е. объемлющий класс не может получить доступ к членам вложенного класса.
-
Вложенный класс также является членом окружающего его класса.
-
Как член окружающего его класса, вложенный класс может быть объявлен закрытым, общедоступным, защищенным или закрытым для пакета (по умолчанию).
-
Вложенные классы делятся на две категории:
- Статический вложенный класс:объявлен как вложенный классстатическийИзвестные как статические вложенные классы.
- внутренний класс:Внутренние классы — это нестатические вложенные классы.
грамматика:
class OuterClass
{
...
class NestedClass
{
...
}
}
статический вложенный класс
В случае нормального или обычного внутреннего класса не может быть объекта внутреннего класса без существующего объекта внешнего класса. То есть объект внутреннего класса всегда тесно связан с объектом внешнего класса. Но в случае статических вложенных классов, если нет объекта внешнего класса, может быть статический объект вложенного класса. То есть объект статического вложенного класса не имеет сильной связи с объектом внешнего класса.
Подобно методам и переменным класса, статические вложенные классы связаны со своими внешними классами. Подобно методам статического класса, статический вложенный класс не может напрямую ссылаться на переменные экземпляра или методы, определенные в охватывающем его классе: он может использовать их только через ссылки на объекты.
Получите к ним доступ, используя прилагаемое имя класса.
OuterClass.StaticNestedClass
Например, чтобы создать объект для статического вложенного класса, используйте следующий синтаксис:
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass ();
// 演示访问静态嵌套类的 Java 程序
class OuterClass
{
// 静态对象
static int outer_x = 10;
// 实例(非静态)对象
int outer_y = 20;
// 私有对象
private static int outer_private = 30;
// 静态嵌套类
static class StaticNestedClass
{
void display()
{
// 可以访问外部类的静态成员
System.out.println("outer_x = " + outer_x);
// 可以访问外部类的显示私有静态成员
System.out.println("outer_private = " + outer_private);
// 以下语句将给出编译错误
// 因为静态嵌套类不能直接访问非静态成员
// System.out.println("outer_y = " + outer_y);
}
}
}
// 驱动程序类
public class StaticNestedClassDemo
{
public static void main(String[] args)
{
// 访问静态嵌套类
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
nestedObject.display();
}
}
вывод:
outer_x = 10
outer_private = 30
внутренний класс
Чтобы создать экземпляр внутреннего класса, сначала должен быть создан экземпляр внешнего класса. Затем создайте внутренний объект внутри внешнего объекта, используя следующий синтаксис:
OuterClass.InnerClass innerObject = externalObject.new InnerClass();
Есть два специальных внутренних класса:
- локальный внутренний класс
- анонимный внутренний класс
// 用于演示访问内部类的 Java 程序
class OuterClass
{
// 静态对象
static int outer_x = 10;
// 实例(非静态)对象
int outer_y = 20;
// 私有对象
private int outer_private = 30;
// 内部类
class InnerClass
{
void display()
{
// 可以访问外部类的静态对象
System.out.println("outer_x = " + outer_x);
// 也可以访问外部类的非静态对象
System.out.println("outer_y = " + outer_y);
// 也可以访问外部类的私有对象
System.out.println("outer_private = " + outer_private);
}
}
}
// 驱动程序类
public class InnerClassDemo
{
public static void main(String[] args)
{
// 访问内部类
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.display();
}
}
вывод:
outer_x = 10
outer_y = 20
outer_private = 30
Сравнение обычных или обычных классов со статическими вложенными классами
серийный номер | нормальный внутренний класс | статический вложенный класс |
---|---|---|
1. | Не может быть объекта внутреннего класса без существующего объекта внешнего класса. То есть объекты внутреннего класса всегда связаны с объектами внешнего класса. | Если объект внешнего класса не существует, могут быть статические вложенные объекты класса. То есть статические вложенные объекты класса не связаны с объектами внешнего класса. |
2. | В обычных/обычных внутренних классах статические члены не могут быть объявлены. | В статическом вложенном классе могут быть объявлены статические члены. |
3. | Поскольку метод main() не может быть объявлен, обычные внутренние классы нельзя вызывать непосредственно из командной строки. | Поскольку метод main() может быть объявлен, статические вложенные классы можно вызывать непосредственно из командной строки. |
4. | Прямой доступ возможен как к статическим, так и к нестатическим членам внешнего класса. | Прямой доступ возможен только к статическим членам внешнего класса. |
Это все для этой статьи
Я давно веду блог о технологиях, и это одна из моих технических статей/руководств. Надеюсь, вам это понравится! Вот краткое изложение всех моих оригинальных и исходных кодов работ:GitHub, и это блог, который я недавно создал:haiyong.site, контента в нем нет, есть какие-то HTML игры и гаджеты, можете попробовать, если интересно, исходники можете скопировать по F12 сами, или можете спросить у меня напрямую.
Если вы действительно узнали что-то новое из этой статьи, ставьте лайк, добавляйте в закладки и делитесь с друзьями. 🤗Наконец, не забудьте поставить ❤ или 📑 в поддержку.