Вкладений статичний клас Java

У цьому підручнику ви дізнаєтесь про вкладений статичний клас за допомогою прикладів. Ви також дізнаєтесь про те, чим статичні класи відрізняються від внутрішніх класів.

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

  • Вкладений нестатичний клас (внутрішній клас)
  • Вкладений статичний клас.

Ми вже обговорювали внутрішні класи в попередньому уроці. Відвідайте вкладений клас Java, якщо ви хочете дізнатись про внутрішні класи.

У цьому підручнику ми дізнаємося про вкладені статичні класи.

Вкладений статичний клас 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(); ) ) 

Вихідні дані

Я плазун. Я ссавець.

У наведеній вище програмі ми маємо два вкладені класи Ссавці та Рептилії всередині класу 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 не дозволяє статичний клас верхнього рівня, ми отримаємо помилку.

Цікаві статті...