Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos

Classe Aninhada Estática em Java

Descubra como as classes aninhadas estáticas do Java funcionam, como diferem de inner classes e quando usá-las com exemplos práticos de código.

Em Java, uma classe pode ser definida dentro de outra classe. Estas são chamadas classes aninhadas e vêm em duas formas:

Enquanto inner classes foram cobertas em nosso tutorial anterior, este artigo foca em classes aninhadas estáticas.


Classe Aninhada Estática em Java

Para declarar uma classe aninhada como estática, simplesmente prefixe a palavra-chave static:

class Animal { static class Mamifero { // membros estáticos e não-estáticos de Mamifero } // membros de Animal } 

Nota: Apenas classes aninhadas podem ser declaradas static; classes de nível superior não podem.

Como qualquer classe, uma classe aninhada estática pode conter tanto membros estáticos quanto de instância.

Por ser um membro estático de sua classe externa, você pode acessar uma classe aninhada estática sem criar instância da classe externa.


Exemplo: Classe Aninhada Estática

class Animal { // inner class class Reptil { public void exibirInfo() { System.out.println("Sou um réptil."); } } // static nested class static class Mamifero { public void exibirInfo() { System.out.println("Sou um mamífero."); } } } class Main { public static void main(String[] args) { // criar instância da classe externa Animal animal = new Animal(); // criar instância de inner class não-estática Animal.Reptil reptil = animal.new Reptil(); reptil.exibirInfo(); // criar instância de static nested class Animal.Mamifero mamifero = new Animal.Mamifero(); mamifero.exibirInfo(); } } 

Saída

Sou um réptil. Sou um mamífero. 

No código acima, Mamifero é uma classe aninhada estática enquanto Reptil é uma inner class.

Observe a sintaxe de instanciação diferente:


Acessando Membros da Classe Externa

Como uma classe aninhada estática é associada à sua classe externa, ela pode acessar apenas membros estáticos da classe externa. Tentativas de referenciar membros de instância resultarão em erro de compilação.

Exemplo: Tentando Chamar Método Não-Estático

class Animal { static class Mamifero { public void exibirInfo() { System.out.println("Sou um mamífero."); } } class Reptil { public void exibirInfo() { System.out.println("Sou um réptil."); } } public void comer() { System.out.println("Como comida."); } } class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal.Reptil reptil = animal.new Reptil(); reptil.exibirInfo(); Animal.Mamifero mamifero = new Animal.Mamifero(); mamifero.exibirInfo(); mamifero.comer(); // ❌ Erro de compilação } } 

Saída

Main.java:28: error: cannot find symbol mamifero.comer(); ^ symbol: method comer() location: variable mamifero of type Mamifero 1 error compiler exit status 1 

O erro ocorre porque mamifero é instância de classe aninhada estática e não pode invocar o método não-estático comer() de Animal.


Classe de Nível Superior Estática?

Java proíbe classes de nível superior estáticas. Apenas classes aninhadas podem ser declaradas static. O código a seguir demonstra o erro do compilador:

static class Animal { public static void exibirInfo() { System.out.println("Sou um animal"); } } class Main { public static void main(String[] args) { Animal.exibirInfo(); } } 

Saída

Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1 

Isso confirma que apenas classes aninhadas podem ser static.

Java

  1. Palavra-chave Static em C#: Dominando Variáveis, Métodos e Classes Estáticas
  2. Entendendo Classes Aninhadas em C#: Definição, Uso e Herança
  3. Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
  4. Operador instanceof em Java: Guia Completo
  5. Dominando Classes Aninhadas e Internas em Java: Tipos, Exemplos e Boas Práticas
  6. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  7. Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
  8. Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
  9. Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
  10. Dominando Java Generics – Construindo Código Reutilizável e Type-Safe