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

В горния пример се опитахме да създадем статичен клас Animal. Тъй като Java не позволява статичен клас от най-високо ниво, ще получим грешка.

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