Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

294
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda