English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Java

Controle de fluxo do Java

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Queue (fila)

conjunto Map do Java

conjunto Set do Java

Java Entrada e Saída (I/O)

Reader do Java/Writer

Outros tópicos do Java

Classe Estática Aninhada Java

Neste tutorial, você aprenderá sobre classes estáticas aninhadas com exemplos. Você também aprenderá a diferença entre classes estáticas e classes internas.

Como mencionado nos tutoriais anteriores, podemos ter uma classe dentro de outra classe no Java. Essa classe é chamada de classe aninhada. No Java, existem dois tipos de classes aninhadas:

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

  • classes estáticas aninhadas.

No tutorial anterior, já discutimos sobre classes internas. Se você quiser saber sobre classes internas, acesseClasse aninhada do Java.

Neste tutorial, vamos aprender sobre classes estáticas aninhadas.

Classe estática aninhada do Java

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

Atenção:No Java, é permitido que classes aninhadas sejam estáticas.

Como classes convencionais, classes aninhadas podem conter tanto campos estáticos quanto não estáticos e métodos. Por exemplo,

Classe Animal {
   static class Mammal {
      // Membros estáticos e estáticos da classe Mammal
   }
   // Membros da classe Animal
}

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

Para acessar classes aninhadas estáticas, não precisamos de um objeto da classe externa.

Exemplo: Classes aninhadas estáticas

class Animal {
  //Classe interna
   class Reptile {
      public void displayInfo() {
        System.out.println("Eu sou um réptil.");
      }
   }
  //Classe estática
   static class Mammal {
      public void displayInfo() {
        System.out.println("Eu sou um mamífero.");
      }
   }
}
class Main {
   public static void main(String[] args) {
      //Criação de objetos da classe externa
      Animal animal = new Animal();
      //Criação de objetos de classes não estáticas
      Animal.Reptile reptile = animal.new Reptile();
      reptile.displayInfo();
      //Criação de objetos de classes aninhadas estáticas
      Animal.Mammal mammal = new Animal.Mammal();
      mammal.displayInfo();
   }
}

Resultados de saída

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

No programa acima, temos duas classes aninhadas Mammal e Reptile dentro da 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()

Acesso aos membros da classe externa

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

Vamos ver o que acontece se tentarmos acessar os campos e métodos de uma classe externa.

Exemplo: Acesso a membros não estáticos

class Animal {
  static class Mammal {
   public void displayInfo() {
     System.out.println("Eu sou um mamífero.");
   }
 }
 class Reptile {
   public void displayInfo() {
     System.out.println("Eu sou um réptil.");
   }
 }
 public void eat() {
   System.out.println("Eu como comida.");
 }
}
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();
 }
}

Resultados de saída

Main.java:28: erro: símbolo não encontrado
    mammal.eat();
          ^
  símbolo: método eat()
  location: variável mammal do tipo Mammal
1 erro
estado de saída do compilador 1

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

Agora, se tentarmos usar o objeto mammal para acessar eat(), o compilador exibirá um erro.
Isso é porque mammal é um objeto de classe estática, então não podemos acessar métodos não estáticos a partir de uma classe estática.

Classe top-level estática

Como mencionado acima, apenas classes aninhadas podem ser estáticas. Não podemos ter classes top-level estáticas.

Vamos ver o que acontece se tentarmos tornar uma classe top-level estática.

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

Resultados de saída

Main.java:1: erro: modificador estático não permitido aqui
class estática Animal {
       ^
1 erro
estado de saída do compilador 1

No exemplo acima, tentamos criar uma classe estática Animal. Como o Java não permite a utilização de classes top-level estáticas, ocorrerá um erro.