Prefácio
Um fechamento é um objeto chamável que registra algumas informações do escopo em que foi criado. Através dessa definição, pode-se observar que a classe interna é um fechamento orientado a objetos, porque não apenas contém informações sobre o objeto de classe periférica (o escopo da criação da classe interna), mas também tem uma referência ao objeto de classe periférica. Nesta função, a classe interna tem o direito de operar todos os membros, incluindo membros privados.
Uma das questões mais controversas do Java é que acredita-se que o Java deve incluir algum mecanismo de ponteiro para permitir retornos de chamada. Através do retorno de chamada, o objeto pode transportar algumas informações que permitem chamar o objeto inicial em algum ponto posterior. Se o retorno de chamada for implementado através de um ponteiro, você só pode esperar que o programador não use mal o ponteiro.
1. Classe interna de membros
Uma classe interna pode ser considerada como membro. A classe interna do membro pode acessar incondicionalmente todas as propriedades de membros e métodos de membros de classes externas.
classe Outterclass {// classe externa private int in = 0; estático int inn = 4; public OutterClass (int in) {this.in = in; } classe InnerClass {// Classe Inner Public void Output () {System.out.println (in); System.out.println (Inn); }}}Quando uma classe interna de membro possui uma variável ou método de membro com o mesmo nome de uma classe externa, os membros da classe interna do membro são acessados por padrão. Se você deseja acessar um membro com o mesmo nome de uma classe externa, precisará acessá -lo no seguinte formulário:
Outterclass (classe externa). Este
Quando uma classe externa acessa uma classe interna, você deve primeiro criar um objeto da classe interna do membro e depois acessá -la através de uma referência a esse objeto.
classe Outterclass {private int in = 0; estático int inn = 4; public OutterClass (int in) {InnerClass INNER = new InnerClass (); this.in = interno.innernum; } classe Innerclass {// Classe Inner Public int inernum = 1; public void output () {System.out.println (in); System.out.println (Inn); int a = Outterclass.This.inn; }}}As classes internas do membro existem com base em classes externas, ou seja, se você deseja criar um objeto da classe interna do membro, a premissa é que um objeto da classe externa deve existir. A maneira geral de criar um objeto de classe interna membro é a seguinte:
classe pública classe de classe {public static void main () {outterclass oc = new OutterClass (3); Outterclass.innerclass in = OC.New inerclass (); }} 2. Categorias internas locais
Uma classe interna local é como uma variável local em um método e não pode ter modificadores public , protected , private e static .
classe outterclass {public OutterClass (int in) {class InnerClass {// Local Inner Class Int Innernum = 1; }}} 3. Classes internas aninhadas
As classes internas aninhadas são classes internas modificadas como static . Uma classe interna declarada como static não requer uma conexão entre o objeto de classe interna e o objeto de classe externa, ou seja, podemos nos referir diretamente ao outer.inner , ou seja, não precisamos criar uma classe sideral ou uma classe interna.
classe outterclass {public OutterClass (int in) {} classe estática inerclass {// Local Inner Class int inernum = 1; }} classe pública classe {public static void main () {Outterclass.innerclass in = new Outterclass.innerclass (); }} 4. Categoria interna anônima
As aulas internas anônimas são as que mais usamos, porque não queremos dar nomes a eles, por isso temos anonimato. Classes internas anônimas precisam ser definidas com antecedência.
btnsan.setOnClickListener (newOnClickListener () {@Override publicVoidOnClick (View v) {}}); 5. Fechamentos e retornos de chamada
Um fechamento é um objeto que pode ser chamado, que salva informações sobre o escopo que o cria. O Java não pode apoiar explicitamente os fechamentos, mas em Java, os fechamentos podem ser implementados por meio da "Interface + Inner Class".
Por exemplo: um programador de interface e um escritor de classe base têm o mesmo work de método e o mesmo nome de método, mas seu significado é completamente diferente. Neste momento, é necessário um fechamento.
classe Writer {// Writer Base Classe Void Work () {};} Programador de interface {// interface do programador Void Work ();} O código de implementação de fechamento é o seguinte:
public class WriterProgrammer estende o Writer {@Override public void Work () {// Writing} public void Code () {// Código de gravação} classe ProgramManner implementa o programador {@Override public void Work () {code (); }}} Na subclasse, uma classe interna que segue as regras de interface do programador é definida e, em seguida, a classe interna implementa o método work() Método Work code() do Programador () e implementa diretamente work() do redator da classe pai na subclasse.
6. O papel das categorias internas
As classes internas podem ser bem implementadas para se esconder.
Geralmente, as classes não internas não permitem permissões private e protected , mas as classes internas podem
A classe interna tem acesso a todos os elementos da classe periférica
Mas a herança múltipla é alcançada
Ele pode evitar modificar a interface e implementar chamadas de dois métodos de mesmo nome na mesma classe.
7. Resumo
O acima é o conteúdo inteiro deste artigo. Espero que seja de alguma ajuda para todos aprenderem ou usarem Java. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.