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

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

Как было показано в предыдущих руководствах, в Java можно создать класс внутри другого класса. Такие классы известны как вложенные классы. В Java вложенные классы бывают двух типов:

  • Вложенный нестатический класс (внутренний класс)
  • Вложенный статический класс.

Мы уже обсуждали внутренние классы в предыдущем уроке. Посетите Java Nested Class, если хотите узнать о внутренних классах.

В этом руководстве мы узнаем о вложенных статических классах.

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

Мы используем ключевое слово, staticчтобы сделать наш вложенный класс статическим.

Примечание. В Java статическими могут быть только вложенные классы.

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

 Class Animal ( static class Mammal ( // static and non-static members of Mammal ) // members of Animal ) 

Статические вложенные классы связаны с внешним классом.

Для доступа к статическому вложенному классу нам не нужны объекты внешнего класса.

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

 class Animal ( // inner class class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) // static class static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) ) class Main ( public static void main(String() args) ( // object creation of the outer class Animal animal = new Animal(); // object creation of the non-static class Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // object creation of the static nested class Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); ) ) 

Вывод

Я рептилия. Я млекопитающее.

В приведенной выше программе у нас есть два вложенных класса Mammal и Reptile внутри класса Animal.

Для создания объекта нестатического класса Reptile мы использовали

 Animal.Reptile reptile = animal.new Reptile() 

Для создания объекта статического класса Mammal мы использовали

 Animal.Mammal mammal = new Animal.Mammal() 

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

В Java статические вложенные классы связаны с внешним классом. Вот почему статические вложенные классы могут обращаться только к членам класса (статическим полям и методам) внешнего класса.

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

Пример: доступ к нестатическим членам

 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: ошибка: не удается найти символ mammal.eat (); символ: метод eat () расположение: переменная млекопитающее типа Mammal 1 ошибка статус выхода компилятора 1

В приведенном выше примере мы создали нестатический метод eat()внутри класса Animal.

Теперь, если мы попытаемся получить доступ eat()с помощью объекта млекопитающего, компилятор выдаст ошибку.

Это потому, что млекопитающее является объектом статического класса, и мы не можем получить доступ к нестатическим методам из статических классов.

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

Как упоминалось выше, статическими могут быть только вложенные классы. У нас не может быть статических классов верхнего уровня.

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

 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: ошибка: модификатор static здесь не разрешен статический класс Animal (1 ошибка компилятора статус выхода 1 

В приведенном выше примере мы попытались создать статический класс Animal. Поскольку Java не допускает использование статических классов верхнего уровня, мы получим ошибку.

Интересные статьи...