classe interna em Java / até agora, sabemos que os membros da classe são variáveis, métodos, construtores e blocos inicializadores.
mas também é possível ter uma classe ou uma interface como membro de uma classe.
uma classe declarada dentro de outra classe é conhecida como classes aninhadas em java. O escopo de uma classe aninhada é vinculado pelo escopo de sua classe envolvente (classe externa).
assim, se a Classe B é definida dentro da classe A, então a Classe B não pode existir independentemente sem a classe a. Aqui, a classe A é externa ou envolvente classe e a Classe B é aninhada classe.
uma classe aninhada em java tem acesso aos membros ( incluindo membros privados) de sua classe anexa. Mas, a classe anexa não tem acesso aos membros da classe aninhada.
a classe que é um membro de outra classe pode ser estática ou não estática. Em outras palavras, existem dois tipos de classes aninhadas em java: estática e não estática.
a classe membro que é declarada com um modificador estático é conhecida como classe aninhada estática em java.
a classe membro que não é estática é conhecida como classe interna ou classe aninhada não estática. É o tipo mais importante de classe aninhada.
neste tutorial, aprenderemos apenas a classe interna em Java. Mais tarde, discutiremos a classe aninhada estática no tutorial adicional.
classe interna em Java
uma classe interna em java é uma classe que é declarada dentro de outra classe sem modificador estático. Também é comumente conhecido como uma classe aninhada não estática em Java. Ele pode acessar todos os membros (variáveis e métodos) de sua classe externa.
uma classe interna não pode ter nenhum tipo de membros estáticos. Os membros da classe interna java podem ser:
- variáveis de Instância
- métodos de Instância
- Construtores
- Inicializador de bloco
- Interior de classe
Sintaxe da classe Interna
access modifier class OuterClassName { . . . . . . . . . . access modifier class InnerClassName { // Members of the inner class. } // Other members of the outer class.}For example:public class Test { // Here, Test is an outer class. . . . . . . // Inner class public class A { // A is inner class as a member of its outer class. . . . . } }
A classe que contém a classe interna é chamada de fechamento ou exterior da classe. A classe envolvente é uma classe de nível superior, enquanto a classe interna é membro da classe externa.
a relação entre classe externa e classe interna representa tem-uma relação. Uma relação tem-a estabelece a relação entre duas classes. Também é conhecido como composição ou agregação em Java.
quando uma classe interna é uma classe envolvente para outra classe interna, ela é chamada de aninhamento de classes internas. Não há limite para o aninhamento de classes internas.
em qual versão A classe interna foi introduzida em Java?
a classe interna foi introduzida na versão Java 1.1 sem quaisquer alterações na JVM usada para lidar com os arquivos de classe. É completamente implementado com a ajuda do compilador Java.
Java compiler gera um arquivo de classe Dot separado para cada classe interna chamada Outer$Inner.classe e para uma classe externa chamada Outer.classe. Por exemplo, uma classe interna A é compilada em um teste de classe chamado Test$A.class.
se algum nome de arquivo de classe dot contiver o símbolo ” $ ” no meio, ele mostrará um arquivo de classe interna. O formato dos arquivos de classe para classes internas tem o mesmo que os arquivos de classe para as classes externas.
portanto, JVM trata os arquivos de classe para classes internas e as classes externas da mesma forma.
Características da classe Interna
Existem várias características importantes de uma classe interna que é a seguinte:
1. Uma classe interna pode ter o mesmo nome que a classe externa.
2. O escopo da classe interna é limitado pelo escopo de sua classe externa.
3. Sem existir um objeto ou instância de classe externa, não haverá chance de um objeto de classe interna existente.
4. Uma classe interna pode acessar diretamente todas as variáveis e métodos da classe externa, incluindo privado.
5. Como a classe interna é um membro regular da classe externa, assim como variáveis e métodos declarados na classe.
é por isso que podemos aplicar todos os modificadores de acesso java, como público, padrão, protegido e privado, à classe interna semelhante aos outros membros de uma classe. Mas a classe externa ou normal não pode ser privada ou protegida.
6. Se o nome da variável da classe interna for o mesmo que o nome da variável da classe externa, podemos acessar a variável da classe externa assim. OuterClassName.presente.VariableName; aqui isso representa o objeto de classe externa atual.
7. A classe interna Java está oculta de outra classe em sua classe envolvente. Portanto, ele fornece um mecanismo de segurança no programa de aplicativos e diminui a legibilidade (compreensão) do programa.
8. Um objeto de classe interna é frequentemente criado em sua classe externa e não pode ser criado a partir de outras classes.
9. Objetos de classe externa e classe interna são criados em locais de memória separados.
Sintaxe para criar objeto da classe Interna em Java
Uma instância de uma classe interna partilha um relacionamento com uma instância de uma classe externa. Essa relação é tal que não podemos criar uma instância da classe interna sem ter uma instância da classe externa.
portanto, para criar um objeto de classe interna, você deve primeiro criar um objeto de classe externa para vincular à classe interna. Podemos criar vários objetos de uma classe interna para a mesma instância de uma classe externa.
A sintaxe para criar um objeto para a classe interna é da seguinte maneira:
Syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();For example:// First create an object of Outer class Test. Test t = new Test();// Second create an object of inner class A. Test.A innerObj = t.new A();
Vamos entender como uma instância de uma classe interna partilha um relacionamento com uma instância de uma classe externa, em tempo real, exemplos.
exemplo em tempo real da classe interna
1. Suponha que haja uma universidade. A Universidade contém vários departamentos, como eletrônica, ciência da Computação, Elétrica, Mecânica, etc.
Suponha que amanhã, o governo decidiu fechar esta universidade, devido à sua atividade ilegal acontecendo na universidade. Se a Universidade estiver fechada, todos os departamentos desta universidade serão fechados automaticamente.
é por isso que podemos dizer que os departamentos estão ligados à sua universidade. ou seja, suas funcionalidades estão vinculadas à sua universidade. Portanto, sem um objeto Universitário existente, não há chance de objetos de departamento existentes.
uma vez que o departamento é sempre uma parte da classe universitária. Portanto, devemos declarar a classe do departamento dentro da classe universitária.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
portanto, sem um tipo de objeto existente, se não houver chance de existir outro tipo de objeto, devemos implementar a classe interna.
2. Suponha que haja um carro. Dentro de um carro, existem vários componentes individuais importantes que são necessários. O componente mais importante do carro é o motor.
o motor deve ser necessário para fazer um carro. Mas sem um objeto de carro existente, também não há chance de existir um objeto de motor.
uma vez que um motor é sempre uma parte importante de um carro. Portanto, o motor da classe deve ser declarado dentro do carro da classe.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
os dois exemplos em tempo real acima são explicados para obter as idéias básicas da classe interna. Agora vamos dar o próximo exemplo com base na API Java.
3. Como sabemos, em Java existe um conceito de mapa na API collections. Um mapa não é nada além de um grupo de pares de valores-chave. Cada par chave-valor é chamado de uma entrada. Agora, sem um objeto de mapa existente, existe alguma chance de objeto de entrada existente?
a resposta é não porque sem existir um objeto de um mapa, o objeto de entrada também não pode existir. É por isso que a entrada da interface é definida dentro da interface do mapa.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
Agora você teria entendido a partir do exemplo em tempo real acima que quando deve usar uma classe interna na programação Java.
uso da classe interna em Java
existem os seguintes usos importantes da classe interna em Java.
1. A classe interna é um recurso valioso porque nos permite agrupar classes e interfaces em um lugar que pertence logicamente.
2. Ajuda a controlar a visibilidade de um dentro do outro para que possa ser mais legível e sustentável.
3. O melhor uso da classe interna java é quando sua funcionalidade está vinculada à sua classe externa. Ou seja, sem um objeto de classe externa existente, não há chance de objeto de classe interna existente. Entenda os exemplos em tempo real.
4. . Java inner class é útil para fornecer segurança para o código importante. Por exemplo, se declararmos a classe interna como privada, ela não estará disponível para outras classes. Isso significa que um objeto para classe interna não pode ser criado em nenhuma outra classe.
vamos entendê-lo com a ajuda do programa de exemplo em tempo real.
suponha que criamos uma classe BankAcct. Para obter alguns detalhes da conta bancária, definimos as variáveis de instância ‘saldo’ e ‘taxa’ de juros na classe.
o método calInterest() calcula o valor dos juros e exibirá o valor do saldo. Veja o seguinte código-fonte.
class BankAcct { // Balance and Rate of interest. private double bal; private double rate; // Calculating interest and updated balance. void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance amount = " +bal); }}
conforme você observa que não há segurança para este código por não usar nenhum modificador de acesso antes da classe BankAcct.
como está sob modificadores de acesso padrão, qualquer programador pode facilmente criar um objeto desta classe e acessar os membros da classe de fora de outras classes. Portanto, não há segurança para a classe BankAcct.
por exemplo, qualquer programador pode criar outra classe. Ele criará uma instância da classe BankAcct e poderá alterar a taxa de juros assim:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
assim, o método calInterest() é muito sensível. Deve ser protegido de pessoas de fora porque as contas de saldo podem ser atualizadas de fora por qualquer outra pessoa. Somente pessoa autorizada deve ser capaz de atualizar as contas de saldo.
para fornecer segurança ao método calInterest() e taxa de juros, se colocarmos o método code of calInterest() dentro de uma classe interna e torná-la privada, ninguém pode acessá-los de fora da classe. Olhe para o código.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
agora a questão é como acessar a classe interna?
para acessar a classe interna, criaremos um método contact () dentro da classe externa. Dentro do método contact (), criaremos um objeto de classe interna e poderemos acessar os membros dele.
uma pessoa do banco de autenticação pode interagir com a classe interna chamando o método contact (). Quando o método contact () for chamado, ele será verificado com senha e, em seguida, poderá usar a classe interna e acessá-la.
assim, uma classe interna pode fornecer um mecanismo de segurança para código importante em Java.
Tipos de classe Interna em Java
com Base na declaração e comportamentos, existem basicamente quatro tipos de classes internas em Java. Eles são os seguintes:
- classe interna Normal ou Regular
- método classe interna Local
- classe interna anônima
- classe interna aninhada estática
neste tutorial, entenderemos cada um em breve.
1. Classe interna Normal ou Regular: uma classe criada dentro de outra classe e fora do método sem modificador estático é chamada de classe interna regular ou normal.
2. Método classe interna local: uma classe declarada dentro de um método da classe externa é chamada de método classe interna local.
3. Classe interna anônima: Uma classe declarada sem nenhum nome é chamada de classe interna anônima.
4. Classe interna aninhada estática: uma classe declarada com modificador estático dentro de uma classe é chamada classe interna aninhada estática. Também é conhecido como uma classe aninhada de nível superior. Ele pode acessar apenas os membros estáticos da classe externa.
Nota: As classes internas regulares, locais de método e anônimas são classes aninhadas não estáticas.
vantagens da classe interna
existem basicamente cinco vantagens da classe interna em java. Eles são os seguintes:
1. A classe interna fornece uma maneira de agrupar as classes e interfaces em um lugar que pertence logicamente.
2. Ele pode acessar diretamente todas as variáveis e métodos da classe externa, incluindo privado.
3. É usado para desenvolver código mais legível e sustentável.
4. Precisa de menos código para escrever.
5. Aumenta o encapsulamento.
diferença entre classe aninhada e classe interna em Java
classe aninhada é uma classe que é definida dentro de outra classe. Existem dois tipos de classe aninhada: estática e não estática. Classe aninhada não estática é a classe interna.
espero que este tutorial tenha coberto todos os recursos importantes da classe interna em java com programas de exemplo em tempo real. Espero que você tenha entendido a ideia básica de usar a classe interna em Java.
obrigado pela leitura!!!Próximo ⇒ membro classe interna em Java
Pre Anterior Próximo ⇒