Java Internal Class e sua instanciação <Br /> em Java, é permitido definir outra classe dentro de uma classe (ou método ou bloco de declaração), chamado de classe interna (classe interna) e às vezes também chamado de classe aninhada (classe aninhada (classe aninhada ).
Existe um relacionamento lógico entre a classe interna e a classe externa que a encapsulma.
As principais razões para o uso de classes internas são:
A classe interna pode acessar dados na classe externa, incluindo dados privados.
A classe interna pode ser oculta de outras classes no mesmo pacote.
Quando você deseja definir uma função de retorno de chamada e não deseja escrever muito código, é mais fácil usar classes internas anônimas.
Reduzir conflitos de nomeação nas classes.
Por favor, veja o seguinte exemplo:
classe pública externa {private int size; = externo interno (); classe interna.
Este código define uma classe externa externa, que contém uma classe interna interna. Comentando a instrução ERRO e compilando, gerará dois arquivos .class. Ou seja, a classe interna será compilada em um arquivo de bytecode independente.
As classes internas são um fenômeno do compilador que não tem nada a ver com máquinas virtuais. O compilador traduzirá a classe interna em um arquivo de classe regular que separa o nome da classe externa do nome da classe interna com o símbolo $, e a máquina virtual não terá idéia.
Nota: Deve haver um objeto da classe externa antes que o objeto da classe interna seja gerado, porque a classe interna precisa acessar variáveis de membros na classe externa, e as variáveis de membros devem ser instantadas para fazer sentido.
As classes internas são novos recursos do Java 1.1.
As categorias internas parecem ter adicionado algumas características bonitas e interessantes, mas desnecessárias. Este tutorial não pretende dar uma resposta positiva a esta pergunta.
Classes internas estáticas de Java, classes internas anônimas, classes internas membros e classes internas locais podem ser estáticas e podem usar controles públicos, protegidos e de acesso privado, enquanto as classes externas só podem usar o público ou o inadimplência.
Classe interna do membro
Uma classe definida diretamente dentro de uma classe externa (não dentro de um método ou bloco de código) é uma classe interna baseada em membro, que pode usar diretamente todas as variáveis e métodos da classe externa, mesmo privados. Se uma classe externa desejar acessar as variáveis e métodos do membro da classe interna, ela precisará ser obtida através do objeto de classe interna.
Por favor, veja o seguinte código:
public class {private int size;
Uma classe interna semelhante a um membro é como um membro comum de uma classe externa.
As classes internas no estilo de membros podem usar vários modificadores, incluindo público, protegido, privado, estático, final e abstrato, ou podem ser escritos sem escrever.
Se houver um modificador estático, é o nível de classe, caso contrário, é o nível do objeto. O nível de classe pode ser acessado diretamente através de classes externas, e o nível de objeto precisa ser criado para ser um objeto externo antes de acessá -lo.
Nenhum membro estático não pode ser declarado em classes internas não estáticas.
As classes internas podem ser chamadas umas às outras, por exemplo:
Classe A {// B e C podem chamar uns aos outros Classe B {} classe C {}}
Acesso às classes internas do membro
Os objetos da classe interna registram referências ao objeto de classe externa de que dependem na forma de variáveis de membro, para que o objeto de classe externa possa ser encontrado e seus membros possam ser acessados. Essa variável de membro é adicionada automaticamente às classes internas não estáticas pelo sistema, com a convenção de nome "OutclassName.This".
1) Ao usar variáveis e métodos não estáticos definidos na classe interna, você deve primeiro criar o objeto da classe externa e depois criar o objeto da classe interna com o operador "OutObjectName.new" e depois chamar o método do a classe interna, como mostrado abaixo:
classe pública demonstração {public static void main (string [] args) {externo externo = novo externo (); classe;
2) A classe interna estática é equivalente ao membro estático de sua classe externa. Exemplos são os seguintes:
classe pública Demo {public static void main (String [] args) {Outer.inner Inner = new Outer.inner (); Dostuff () {size ++;
Resultados em execução:
tamanho = 1
3) Como as classes internas podem acessar diretamente os componentes de suas classes externas, os conflitos de nomeação também ocorrerão quando a classe interna tiver o mesmo atributo ou método em suas classes externas. Então, ao ligar para várias camadas, você deve especificá -lo da seguinte forma:
classe pública {Size privado; / tamanho da classe externa}}}
Classes internas locais
A classe local é uma classe definida em um bloco de código. Eles só são visíveis nos blocos de código que os definem.
As aulas locais têm várias características importantes:
As aulas locais podem ser abstratas.
Por favor, veja o seguinte código:
classe pública externa {public static int total_number = 5; void innertest () {System.out.println (total_number); método local (idade);
Resultados em execução:
512315
Classe interna anônima
As classes internas anônimas são uma forma especial de classes internas locais, ou seja, não há nome de variável apontando para uma instância dessa classe, e a implementação de classe específica será gravada nesta classe interna.
NOTA: As aulas anônimas devem herdar uma classe pai ou implementar uma interface.
Não é possível usar classes internas anônimas para implementar métodos abstratos:
Resumo Pessoa da classe {public abstract void eat ();} classe Child estende a pessoa {public void eat () {System.out.println ("coma alguma coisa"); args) {Pessoa p = novo filho ();
Resultados em execução:
comer alguma coisa
Como você pode ver, herdamos a classe de pessoa com a criança e, em seguida, implementamos uma instância de criança, transformando -a para cima em uma referência à classe da pessoa. Mas se a aula infantil aqui for usada apenas uma vez, não seria problemático escrevê -la como uma classe independente?
Neste momento, foram introduzidas aulas internas anônimas. Implementação usando classes internas anônimas:
Resumo da classe Pessoa {public abstract void eat ();} public class Demo {public static void main (string [] args) {// herde a classe de pessoa new pessoa () {public void e em () {System.out.println ( "Coma alguma coisa");
Como você pode ver, a classe anônima herda a classe da pessoa e implementa os métodos de classes abstratas em aparelhos encaracolados.
A sintaxe das classes internas é relativamente complexa e raramente é usada no desenvolvimento real. Este tutorial não deve ser explicado em profundidade, e os leitores não devem considerar as classes internas como o foco do aprendizado de Java.