В този урок ще научите за вложения статичен клас с помощта на примери. Също така ще научите за това как статичните класове се различават от вътрешните класове.
Както се научихме в предишни уроци, можем да имаме клас в друг клас в 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 не позволява статичен клас от най-високо ниво, ще получим грешка.