Classe estática aninhada em Java

Neste tutorial, você aprenderá sobre classes estáticas aninhadas com a ajuda de exemplos. Você também aprenderá como as classes estáticas diferem das classes internas.

Conforme aprendido em tutoriais anteriores, podemos ter uma classe dentro de outra classe em Java. Essas classes são conhecidas como classes aninhadas. Em Java, as classes aninhadas são de dois tipos:

  • Classe não estática aninhada (classe interna)
  • Classe estática aninhada.

Já discutimos as classes internas no tutorial anterior. Visite Java Nested Class se quiser aprender sobre classes internas.

Neste tutorial, aprenderemos sobre classes estáticas aninhadas.

Classe estática aninhada em Java

Usamos a palavra static- chave para tornar nossa classe aninhada estática.

Nota: Em Java, apenas classes aninhadas podem ser estáticas.

Como as classes regulares, as classes aninhadas estáticas podem incluir campos e métodos estáticos e não estáticos. Por exemplo,

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

As classes aninhadas estáticas são associadas à classe externa.

Para acessar a classe aninhada estática, não precisamos de objetos da classe externa.

Exemplo: classe aninhada estática

 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(); ) ) 

Resultado

Eu sou um réptil. Eu sou um mamífero

No programa acima, temos duas classes aninhadas Mammal e Reptile dentro de uma classe Animal.

Para criar um objeto da classe não estática Reptile, usamos

 Animal.Reptile reptile = animal.new Reptile() 

Para criar um objeto da classe estática Mammal, usamos

 Animal.Mammal mammal = new Animal.Mammal() 

Acessando Membros da Classe Externa

Em Java, as classes aninhadas estáticas são associadas à classe externa. É por isso que as classes aninhadas estáticas só podem acessar os membros da classe (campos e métodos estáticos) da classe externa.

Vamos ver o que acontecerá se tentarmos acessar campos e métodos não estáticos da classe externa.

Exemplo: Acessando membros não estáticos

 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(); ) ) 

Resultado

Main.java:28: erro: não é possível encontrar o símbolo mamífero.eat (); símbolo: método eat () localização: variável mamífero do tipo Mammal 1 erro compilador status de saída 1

No exemplo acima, criamos um método não estático eat()dentro da classe Animal.

Agora, se tentarmos acessar eat()usando o objeto mamífero, o compilador mostra um erro.

É porque o mamífero é um objeto de uma classe estática e não podemos acessar métodos não estáticos de classes estáticas.

Classe estática de nível superior

Conforme mencionado acima, apenas classes aninhadas podem ser estáticas. Não podemos ter classes estáticas de nível superior.

Vamos ver o que acontecerá se tentarmos tornar uma classe de nível superior estática.

 static class Animal ( public static void displayInfo() ( System.out.println("I am an animal"); ) ) class Main ( public static void main(String() args) ( Animal.displayInfo(); ) ) 

Resultado

 Main.java:1: erro: modificador estático não permitido aqui classe estática Animal (1 erro status de saída do compilador 1 

No exemplo acima, tentamos criar uma classe estática Animal. Como o Java não permite classe estática de nível superior, obteremos um erro.

Artigos interessantes...