Eu sou novo em Java. Eu sou um programador C ++, lendo algum código Java. Eu tenho essa definição de classe:
class Container {
long ID;
class Contained {
void foo(){
long parentID = ID;
}
}
}
Vejo que o Contained pode acessar qualquer membro da classe Container, simplesmente pelo nome.
Eu tenho uma pergunta:
O que está acontecendo aqui? Em C ++, essas classes não seriam relacionadas. Mas em Java, parece, o objeto de classe contido parece estar implicitamente ligado à instância do objeto de classe pai.
obrigado Manish
PS: Desculpe, eu sei que poderia pegar um livro sobre Java, mas eu esperava que alguém pudesse me ajudar.
Respostas:
3 para resposta № 1Desde o Contained
classe não é declarada como static
, isso significa que só pode existir dentro de uma instância de um Container
classe e, portanto, tem acesso a todos os métodos e variáveis de Container
.
Se você tivesse declarado Contained
Como static
, ele imitaria o uso de C ++ ao qual você está mais habituado - ou seja, você poderia ter uma instância da classe aninhada sem ter uma instância de Container
.
Vejo Classe interna de Java e classe aninhada estática para mais detalhes.
3 para resposta № 2
Em Java, eles são chamados de classes aninhadas. Existem vários tipos de classes aninhadas com semânticas diferentes. Há informações em http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html.
No seu exemplo que é uma classe interna, suas instâncias existem dentro de uma instância da classe externa.
0 para resposta № 3
Esta é uma classe aninhada. Seu ciclo de vida está vinculado à classe pai. Ler Aqui para total compreensão.