classe interna - Inner class

Em programação orientada para o objecto (OOP), uma classe interna ou classe aninhada é uma classe declarado inteiramente dentro do corpo de uma outra classe ou interface. Distingue-se a partir de uma subclasse .

visão global

Uma instância de uma classe de nível superior normal ou pode existir por conta própria. Em contraste, um exemplo de uma classe interna não pode ser instanciada sem estar vinculado a uma classe de nível superior.

Tomemos a noção abstrata de um Carcom quatro Wheels. Nossos Wheels tem uma característica específica que se baseia em fazer parte do nosso Car. Esta noção não representa os Wheels como Wheels de uma forma mais geral, que poderia ser parte de qualquer veículo. Em vez disso, ele representa-los como específicos para um Car. Podemos modelar esta noção usando classes internas da seguinte forma:

Nós temos a classe de nível superior Car. Instâncias de classe Carsão compostos de quatro instâncias da classe Wheel. Esta implementação particular Wheelé específico para um carro, de modo que o código não modelar a noção geral de uma roda que seria melhor representado como uma classe de nível superior. Portanto, é semanticamente ligado à classe Care o código de Wheelé de alguma forma acoplados à sua classe exterior, sendo uma unidade de composição de um carro. A roda de um carro particular é exclusivo para esse carro, mas para a generalização, a roda é uma unidade de agregação para o carro.

Classes internas fornecem um mecanismo para modelar com precisão esta conexão. Podemos nos referir a nossa Wheelclasse como Car.Wheel, Carsendo a classe de nível superior e Wheelsendo a classe interna.

Classes internas, por conseguinte, permitir a orientação objectivo de certas partes do programa que de outra forma não ser encapsulados em uma classe.

segmentos maiores de código dentro de uma classe pode ser mais bem modelado ou reformulado como uma classe de nível superior separada, em vez de uma classe interna. Isto faria com que o código mais geral na sua aplicação e, portanto, mais re-utilizáveis, mas potencialmente poderia ser a generalização prematura. Isso pode revelar-se mais eficaz, se o código tem muitas classes internas com a funcionalidade compartilhada.

Tipos de classes aninhadas em Java

Em Java , existem quatro tipos de nested class:

Estático
  • Classe membro estático, também chamado de classes aninhadas estáticas  - Eles são declarados static. Como outras coisas no escopo estático (ou seja, métodos estáticos ), eles não têm uma instância juntando, e não pode acessar variáveis de instância e métodos da classe delimitador. Eles são quase idênticas às classes não-aninhadas com exceção de detalhes de escopo (que pode se referir a variáveis estáticas e métodos da classe delimitador, sem qualificar o nome; outras classes que não são uma de suas classes encerram têm de se qualificar seu nome com a sua classe delimitador de nome). Aninhados interfaces de são implicitamente estática.
Não-estáticos / classes internas

Classe interna - As seguintes categorias são chamadas classes internas . Cada exemplo destas classes tem uma referência a um exemplo que envolve (por exemplo, uma instância da classe envolvente), excepto para as classes de locais e anónimos declaradas no contexto estático. Assim, eles podem referir-se implicitamente a variáveis e métodos da classe delimitador de instância. A referência exemplo envolvente pode ser explicitamente obtido através EnclosingClassName.this. Classes internas podem não ter variáveis ou métodos estáticos, exceto para as variáveis constantes de tempo de compilação. Quando eles são criados, elas devem ter uma referência a um exemplo da classe envolvente; o que significa que eles devem ser criados dentro de um método de instância ou construtor da classe envolvente, ou (para o membro e as classes anónimos) ser criada usando a sintaxe enclosingInstance.new InnerClass().

  • classe dos membros - Eles são declaradas fora de uma função (por isso um "membro") e não declarado "estático".
  • classe local - Estes são classes que são declaradas no corpo de uma função. Eles só podem ser referida no resto da função. Eles podem usar as variáveis ​​locais e parâmetros da função, mas apenas um que são declarados "final". (Isso ocorre porque a instância da classe local deve manter uma cópia separada da variável, como pode out-viver a função, de modo a não ter a confusão de duas variáveis ​​modificáveis ​​com o mesmo nome no mesmo escopo, a variável é forçada ser não-modificáveis.) pode ser muito útil para a criação de uma classe com campos de tipo genérico, onde as variáveis ​​de tipo são definidas no método.
  • Classe anônima  - Estes são classes locais que são automaticamente declarados e instanciado no meio de uma expressão. Eles só podem estender diretamente uma classe ou implementar uma interface. Eles podem especificar os argumentos para o construtor da superclasse, mas não pode de outra maneira ter um construtor (no entanto, esta não é uma limitação, uma vez que pode ter um bloco instância inicializador para executar qualquer inicialização).

Linguagens de programação

código de GUI

Classes internas locais são frequentemente utilizados em Java para definir retornos de chamada para o código GUI. Componentes pode então compartilhar um objeto que implementa uma interface de manipulação de eventos ou estende uma classe adaptadora abstrato, contendo o código a ser executado quando um determinado evento é acionado.

Anônimos classes internas também são usados ​​onde o código de manipulação de eventos é utilizado apenas por um componente e, portanto, não precisa de uma referência nomeada.

Isso evita um monolítico grande actionPerformed(ActionEvent)método com múltiplos if-else ramos para identificar a origem do evento. Este tipo de código é muitas vezes considerado confuso e as variações de classe internas são considerados para ser melhor em todos os aspectos.

Referências

links externos