Objeto.Objeto2 obj = new Objeto().new Objeto2()

Olá,

Estou construindo uma aplicação para um trabalho de aula e uma situação curiosa surgiu…

Neste meu trabalho, o professor exigiu que todas as classes utilizadas estivessem dentro do mesmo arquivo java. Desta forma, criei duas classes internas, mais ou menos neste molde:

public class Objeto{
  
  class Objeto2{

  }

  class Objeto3{

  }

}

Logo após terminar de implementar todas essas classes veio a hora de criar o método main na classe Objeto. Olha só o que eu tive de fazer pra poder funcionar:

public static void main(String args[]){
  Objeto.Objeto2 obj = new Objeto().new Objeto2();
}

Alguém poderia me explicar o por que desta situação ? Nunca havia me deparado com ela.

Desde já, muito obrigado

Leandro

Acontece que vc está declarando inner classes, ou classes internas, e essa é a sintaxe correta para criar uma instância de uma classe interna. Ter mais de uma classe no mesmo arquivo não significa necessariamente construir classes internas. Vc pode ter classes independentes(não internas) declarando-as fora do escopo de qualquer outra classe, isto é, fora dos sinais “{” e “}”. Eu recomendo vc dar um lida a respeito de inner class, é um assunto simples e curto.

Obrigado, eu nunca havia lido sobre este assunto. Valeu e obrigado.

[quote=dacunha]
Neste meu trabalho, o professor exigiu que todas as classes utilizadas estivessem dentro do mesmo arquivo java. [/quote]

a) Que nojo :stuck_out_tongue: Em Cobol/2000, perdão, Java, é melhor deixar cada classe em um arquivo separado. Dá menos confusão.
b) Se apenas uma das classes for pública, e as outras forem “package-private”, você pode declará-las todas no mesmo arquivo, sem precisar criar “inner classes” como você fez.

public class Objeto {
...
}
class Objeto2 {
...
}

c) Outra forma é declarar as classes como estáticas:

public class Objeto {
    static class Objeto2 {
...

Na hora de instanciar:

    Objeto.Objeto2 obj = new Objeto.Objeto2();