Вложенный статический класс Java
Вложенный статический класс 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();
}
}
Вывод
I am a reptile. I am a mammal.
В приведенной выше программе у нас есть два вложенных класса Mammal. и Рептилия внутри класса 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: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 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: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1
В приведенном выше примере мы попытались создать статический класс Animal. . Так как Java не поддерживает статический класс верхнего уровня, мы получим ошибку.
java