Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

296
Vistas
¿Cómo puedo acceder al campo OuterClass desde InnerClass?

He estado aprendiendo Java y OOP durante algunas semanas.

Ayer aprendí clase interna y clase externa. Quiero saber la forma de acceder al campo de la clase exterior desde la clase interior cuando tienen exactamente el mismo nombre.

Como a continuación, es posible acceder al campo de la clase exterior desde la clase interior cuando tienen nombres diferentes.

 public class OuterClass { public String OuterName; public OuterClass(String OuterName) { this.OuterName = OuterName; } public class InstanceInnerClass { public String InnerName; public InstanceInnerClass(String InnerName) { this.InnerName = InnerName; } // In this method, accessing field in outer and inner class is possible. // when they have different name. public void printAllName() { System.out.printf("OuterName: %s, InnerName: %s\n", OuterName, InnerName); } } }

Cuando tienen el mismo nombre, no sé cómo acceder a ambos nombres.

 public class OuterClass { public String name; // field which has same name public OuterClass(String name) { this.name = name; } public class InstanceInnerClass { public String name; // field which has same name public InstanceInnerClass(String name) { this.name = name; } public void printAllName() { // What should be written in this code // to print both name fields from OuterClass and InnerClass System.out.printf("OuterName: %s, InnerName: %s\n", name, name); } } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Simplemente haciendo OuterClass.this y el nombre del campo de la OuterClass a la que desea acceder, por ejemplo, OuterClass.this.OuterName . En su código se vería así:

 public class OuterClass { public String name; // field which has same name public OuterClass(String name) { this.name = name; } public class InstanceInnerClass { public String name; // field which has same name public InstanceInnerClass(String name) { this.name = name; } public void printAllName() { // What should be written in this code // to print both name fields from OuterClass and InnerClass System.out.printf("OuterName: %s, InnerName: %s\n", name, OuterClass.this.name); } } }

Cuando tiene dos campos con el mismo nombre, uno en la clase interna y el otro en la clase externa ( es decir, sombreado), e intenta acceder desde la clase interna a ese campo, el compilador asume que desea acceder al campo desde la clase interna, e ignora el otro de la clase externa. De lo contrario, sería imposible elegir qué variable usar.

sombreado

Si una declaración de un tipo (como una variable miembro o un nombre de parámetro) en un ámbito particular (como una clase interna o una definición de método) tiene el mismo nombre que otra declaración en el ámbito adjunto , entonces la declaración sombrea la declaración del alcance envolvente. No puede hacer referencia a una declaración sombreada solo por su nombre.

over 4 years ago · Santiago Trujillo Denunciar

0

Los campos de OuterClass son accesibles en InnerClass a través de OuterClass.this :

 public void printAllName() { // to print both name fields from OuterClass and InnerClass System.out.printf("OuterName: %s, InnerName: %s\n", OuterClass.this.name, this.name); }

Prueba:

 OuterClass outer = new OuterClass("myOuter"); OuterClass.InstanceInnerClass inner = outer.new InstanceInnerClass("myInner"); inner.printAllName();

huellas dactilares:

 OuterName: myOuter, InnerName: myInner
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda