Clase estática anidada de Java
Clase estática anidada de Java
En este tutorial, aprenderá sobre la clase estática anidada con la ayuda de ejemplos. También aprenderá cómo las clases estáticas difieren de las clases internas.
Como aprendimos en tutoriales anteriores, podemos tener una clase dentro de otra clase en Java. Estas clases se conocen como clases anidadas. En Java, las clases anidadas son de dos tipos:
- Clase no estática anidada (clase interna)
- Clase estática anidada.
Ya hemos discutido las clases internas en el tutorial anterior. Visite Java Nested Class si desea obtener información sobre las clases internas.
En este tutorial, aprenderemos acerca de las clases estáticas anidadas.
Clase estática anidada de Java
Usamos la palabra clave static
para hacer que nuestra clase anidada sea estática.
Al igual que las clases normales, las clases anidadas estáticas pueden incluir campos y métodos tanto estáticos como no estáticos. Por ejemplo,
Class Animal {
static class Mammal {
// static and non-static members of Mammal
}
// members of Animal
}
Las clases anidadas estáticas están asociadas con la clase externa.
Para acceder a la clase anidada estática, no necesitamos objetos de la clase externa.
Ejemplo:Clase anidada 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();
}
}
Salida
I am a reptile. I am a mammal.
En el programa anterior, tenemos dos clases anidadas Mammal y Reptil dentro de una clase Animal .
Para crear un objeto de la clase Reptile no estática, hemos utilizado
Animal.Reptile reptile = animal.new Reptile()
Para crear un objeto de la clase estática Mammal , hemos usado
Animal.Mammal mammal = new Animal.Mammal()
Acceso a miembros de la clase externa
En Java, las clases anidadas estáticas están asociadas con la clase externa. Esta es la razón por la cual las clases anidadas estáticas solo pueden acceder a los miembros de la clase (campos y métodos estáticos) de la clase externa.
Veamos qué sucederá si intentamos acceder a campos y métodos no estáticos de la clase externa.
Ejemplo:Acceso a miembros no 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();
}
}
Salida
Main.java:28: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 1
En el ejemplo anterior, hemos creado un método no estático eat()
dentro de la clase Animal .
Ahora, si intentamos acceder a eat()
usando el objeto mamífero , el compilador muestra un error.
Es porque mamífero es un objeto de una clase estática y no podemos acceder a métodos no estáticos desde clases estáticas.
Clase estática de nivel superior
Como se mencionó anteriormente, solo las clases anidadas pueden ser estáticas. No podemos tener clases estáticas de nivel superior.
Veamos qué sucederá si tratamos de hacer que una clase de nivel superior sea 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();
}
}
Salida
Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1
En el ejemplo anterior, hemos intentado crear una clase estática Animal . Dado que Java no permite la clase estática de nivel superior, obtendremos un error.
Java