Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Статические вложенные классы в Java: использование, отличия и примеры

Статические вложенные классы в Java

Узнайте, как работают статические вложенные классы в Java, чем они отличаются от внутренних классов и когда их использовать с практическими примерами кода.

В Java класс может быть определен внутри другого класса. Они называются вложенными классами и бывают двух форм:

Внутренние классы были рассмотрены в нашем предыдущем руководстве, эта статья фокусируется на статических вложенных классах.


Статический вложенный класс в Java

Чтобы объявить вложенный класс как статический, просто добавьте ключевое слово static:

class Animal { static class Mammal { // статические и нестатические члены Mammal } // члены Animal } 
Примечание: Только вложенные классы могут быть объявлены static; верхнеуровневые классы не могут.

Как и любой класс, статический вложенный класс может содержать как статические, так и экземплярные члены.

Поскольку он является статическим членом своего внешнего класса, вы можете получить доступ к статическому вложенному классу без создания экземпляра внешнего класса.


Пример: Статический вложенный класс

class Animal { // внутренний класс class Reptile { public void displayInfo() { System.out.println("I am a reptile."); } } // статический вложенный класс static class Mammal { public void displayInfo() { System.out.println("I am a mammal."); } } } class Main { public static void main(String[] args) { // создание экземпляра внешнего класса Animal animal = new Animal(); // создание экземпляра нестатического внутреннего класса Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // создание экземпляра статического вложенного класса Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); } } 

Вывод:

I am a reptile. I am a mammal. 

В коде выше Mammal — статический вложенный класс, а Reptile — внутренний класс.

Обратите внимание на разный синтаксис инстанцирования:


Доступ к членам внешнего класса

Поскольку статический вложенный класс ассоциирован со своим внешним классом, он может обращаться только к статическим членам внешнего класса. Попытки ссылки на экземплярные члены приведут к ошибке компиляции.

Пример: Попытка вызова нестатического метода

class Animal { static class Mammal { public void displayInfo() { System.out.println("I am a mammal."); } } class Reptile { public void displayInfo() { System.out.println("I am a reptile."); } } public void eat() { System.out.println("I eat food."); } } class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); mammal.eat(); // ❌ Ошибка компиляции } } 

Вывод:

Main.java:28: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 1 

Ошибка возникает, потому что mammal является экземпляром статического вложенного класса и не может вызвать нестатический метод eat() класса Animal.


Статический верхнеуровневый класс?

Java запрещает статические верхнеуровневые классы. Только вложенные классы могут быть объявлены static. Следующий код демонстрирует ошибку компилятора:

static class Animal { public static void displayInfo() { System.out.println("I am an animal"); } } class Main { public static void main(String[] args) { Animal.displayInfo(); } } 

Вывод:

Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1 

Это подтверждает, что только вложенные классы могут быть static.

java

  1. Ключевое слово static в C#: статические переменные, методы и классы
  2. Вложенные классы в C#: определение, использование и наследование
  3. Ключевое слово final в Java: переменные, методы и классы
  4. Оператор instanceof в Java: полное руководство с примерами
  5. Вложенные и внутренние классы в Java: типы, примеры и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Паттерн Singleton в Java: как реализовать и безопасно использовать
  8. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  9. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  10. Освоение Java Generics: создание переиспользуемого, типобезопасного кода