Classe estática aninhada em Java
Classe estática aninhada em Java
Neste tutorial, você aprenderá sobre classe estática aninhada com a ajuda de exemplos. Você também aprenderá como as classes estáticas diferem das classes internas.
Como aprendemos nos 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-chave
static
para tornar nossa classe aninhada estática. Observação: Em Java, apenas classes aninhadas podem ser estáticas.
Assim 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();
}
}
Saída
I am a reptile. I am a mammal.
No programa acima, temos duas classes aninhadas Mammal e Réptil 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 , Nós 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:como acessar 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();
}
}
Saída
Main.java:28: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 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 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
Como 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();
}
}
Saída
Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1
No exemplo acima, tentamos criar uma classe estática Animal . Como Java não permite classes estáticas de nível superior, receberemos um erro.
Java