Visão geral
Recentemente, aprendendo Python e descobriu que o Python suporta mais herança, o que me lembra esse mecanismo implementado pela classe interna. Este artigo não se trata de como obter mais herança através da classe interna, mas resumir os tipos e métodos de uso da classe interna.
Java Internal Class é dividida em:
A classe interna é usada no código -fonte do Android em grandes quantidades.
Em seguida, introduza essas classes internas, respectivamente.
Classe interna não estática
Quando uma classe é um membro não estático de outra classe, esta classe é uma classe interna não estática.
O código de exemplo de criar uma classe interna não estática é a seguinte:
classe Outclass {classe InnerClass {}}
Quando compilamos o JAVAC, descobrimos que dois arquivos .class foram gerados: Outclass.class e Outclass $ innerclass.class. Como mostrado na figura abaixo:
Classes internas do método não -estático da classe externa
É fácil acessar a classe interna na classe externa. O código de exemplo é o seguinte:
Classe pública Outclass {private static int a = 0; .Makeinner ();} classe Innerclass {public void Seeouter () {System.out.println (a);Os resultados são os seguintes:
0
Classes internas do método estático da classe externa
É relativamente simples acessar a classe interna na classe externa.
Outclass.innerclass inerclass = new Outclass ().
Em outras palavras, a classe interna não estática deve ser instanciada primeiro e, em seguida, as classes internas instantadas são usadas através dos objetos de classe externa. O código de exemplo é o seguinte:
Classe pública Outclass {private static int a = 0; .innerclass inerclass = novo outclass ().
Execute os resultados:
01
Esta referência na classe interna
As classes comuns podem fazer referência aos objetos atuais com isso, bem como classes internas. Mas e se a classe interna quiser citar o objeto atual da classe externa? Você pode usar as seguintes maneiras:
Nome externo
O código de exemplo é o seguinte:
Classe pública Outclass {private static int a = 0; .innerclass inerclass = novo outclass (). }}}
Classe interna estática
A classe interna não estática é introduzida acima.
A classe interna estática é o papel de um membro estático na classe externa.
Observe que a classe externa não pode ser modificada usando o modificador estático.
O código de exemplo é o seguinte:
classe Outclass {classe estática Innerclass {}}
Comando com o comando javac, você pode ver que existem dois arquivos .classe, conforme mostrado na figura abaixo:
Classes internas de classes internas estáticas do método não -estático da classe externa
Visitar classes internas estáticas de classes externas é a mesma que classes internas não estatais em categorias externas. No entanto, deve -se notar que, neste momento, a classe interna estática só pode acessar os membros estáticos da classe externa e os membros não estatísticos não podem ser acessados.
O código de exemplo é o seguinte:
Classe pública Outclass {private static int a = 0; Outclass oclass = novo outclass (); println (b);}}}
Os resultados da execução são os seguintes:
Outclass $ innerclass@79A3400
Classificação interna de classes internas estáticas do método estático externo
Perceber:
Como a classe interna estática é um membro estático da classe externa, e os membros estáticos estão vinculados à classe, não ao objeto de objetos instantados. Portanto, as classes internas no método estático da classe externa não precisam instanciar primeiro a classe externa.
O código de exemplo é o seguinte:
Classe pública Outclass {private static int a = 0; Oclass de saída = novo outclass (); este);
Classe interna anônima
A classe interna anônima está inundando o desenvolvimento de aplicativos Android.
A classe interna anônima pode saber que essa é uma classe interna que não possui uma categoria, que geralmente é usada para simplificar o código.
Eu acredito que os alunos que escrevem Java usam os threads. O código de exemplo é o seguinte:
Public class Outclass {public void testAnonymousClass () {thread t = new Thread (new Runnable () {@Override public void run () {for (int i = 0; i <10; i ++) {System.out.println (i); Experimente {Thread.sleep (500);} Catch (interrupto .
Os resultados da execução são os seguintes:
Outro tópico está funcionando ...