inner - java classes
¿Por qué se permite la creación de instancias de objeto de clase anidada estática? (3)
¿Por qué podemos crear un objeto de clase interna si está marcado como estático?
Es posible que necesite usar una nested class
en un contexto static
, por ejemplo:
public class Test {
public static void main(String args[]) {
InnerClass innerClass = new InnerClass();
}
class InnerClass {
}
}
En este caso, cuando intenta crear una instancia de la innerClass
, innerClass
el error:
No se puede acceder a ninguna instancia adjunta de tipo Test. Debe calificar la asignación con una instancia adjunta de tipo Test (por ejemplo, xnew A () donde x es una instancia de Test).
Para evitar esto, puede crear una instancia de un objeto de tipo Test
y crear una instancia de innerClass
partir de él:
Test test = new Test();
InnerClass innerClass = test.new InnerClass();
o mejor, declare también la innerClass
como estática y innerClass
instancia en un contexto estático:
public class Test {
public static void main(String args[]) {
InnerClass innerClass = new InnerClass();
}
static class InnerClass {
}
}
He comenzado a aprender el lenguaje Java para el desarrollo de aplicaciones para Android.
Según mi entendimiento basado en la clase estática, no podemos instanciar el objeto de la clase estática.
Pero, ¿por qué se permite la creación de instancias de objeto de clase anidada estática en la siguiente situación?
class EnclosingClass
{
//...
class static StaticInnerClass
{
//...
}
}
¿Por qué podemos crear un objeto de clase interna si está marcado como estático?
EnclosingClass.StaticInnerClass s = new EnclosingClass.StaticInnerClass()
Según mi entendimiento basado en la clase estática, no podemos instanciar el objeto de la clase estática.
Su comprensión del significado de "clase estática" es incorrecta. Básicamente, una "clase estática" en Java es una clase anidada que no tiene una referencia implícita a una instancia de la clase contenedora. Consulte la sección 8.5.1 de JLS para obtener más información, en particular:
La palabra clave estática puede modificar la declaración de un tipo de miembro C dentro del cuerpo de una clase o interfaz no interna T. Su efecto es declarar que C no es una clase interna. Así como un método estático de T no tiene una instancia actual de T en su cuerpo, C tampoco tiene una instancia actual de T, ni tampoco tiene instancias que encierren léxicamente.
Quizás estabas pensando en clases estáticas en C #, ¿cuáles son completamente diferentes?
Compruébalo, tal vez pueda ayudarte Link