O que é classe interna em Java?

Publicados: 2022-04-29

O conceito de classe interna em Java é fundamental para a programação Java. Em Java, uma classe aninhada e uma classe interna são duas ideias muito semelhantes, porém ligeiramente distintas, de design de classe e geralmente andam de mãos dadas.

Uma classe aninhada é definida dentro de outra classe e tem dois tipos – classe aninhada estática e classe aninhada não estática. Por outro lado, uma classe interna é um tipo de classe aninhada não estática e é ainda de três tipos – classe interna de membro, classe interna anônima e classe interna local.

Então, o que esses três tipos de classes internas significam e para que servem? Continue lendo para descobrir neste guia detalhado sobre a classe interna Java.

Índice

Significado da classe interna em Java

Uma classe aninhada não estática ou classe interna é definida dentro de outra classe e tem acesso aos membros da classe externa (classe envolvente). Pelo contrário, uma classe aninhada estática também é uma classe definida dentro de outra classe, mas ao contrário de uma classe aninhada não estática, ela não pode acessar as variáveis ​​de membro de sua classe externa. No caso de uma classe aninhada não estática, não precisamos criar uma instância da classe externa. Mas no caso de uma classe interna, devemos primeiro instanciar a classe externa para podermos instanciar a classe interna.

Fonte

Tipos de classe interna em Java

Em Java, as classes internas são dos três tipos a seguir:

  • Classe interna do membro
  • Classe interna anônima
  • Classe interna local

Agora, vamos entender cada tipo de classe interna com exemplos.

1. Classe Interna de Sócios

Uma classe interna de membro em Java é uma classe aninhada não estática criada dentro de uma classe, mas fora de um método. Também chamada de classe interna regular, uma classe interna de membro pode ser declarada com modificadores de acesso como private, public, default e protected.

A sintaxe para uma classe interna de membro é a seguinte:

classe Exterior{

//código

classe Interna{

//código

}

}

Classe interna do membro no exemplo Java:

Dado abaixo é um programa para demonstrar como criar uma classe interna e acessá-la. Vamos tornar a classe interna privada e usar o método display_Inner() para acessar a classe.

class DemoOuter {

número inteiro;

// classe interna

aula privada DemoInner {

public void print() {

System.out.println(“Esta é a classe interna”);

}

}

// Acessando a classe interna do método dentro

void display_Inner() {

DemoInner interno = new DemoInner();

interior.impressão();

}

}

classe pública MinhaClasse {

public static void main(String args[]) {

// Instanciando a classe externa

DemoOuter = new DemoOuter();

// Acessando o método display_Inner()

exterior.display_Inner();

}

}

Saída: Esta é a classe interna

No exemplo acima, OuterDemo é a classe externa, InnerDemo é a classe interna, estamos instanciando a classe interna dentro do método display_Inner(), que é invocado a partir do método main.

Explore nossos cursos populares de engenharia de software

SL. Não Programas de Desenvolvimento de Software
1 Mestre em Ciência da Computação pela LJMU & IIITB Programa de Certificado de Segurança Cibernética Caltech CTME
2 Curso de Desenvolvimento Full Stack Programa PG em Blockchain
3 Programa de Pós-Graduação Executiva em Desenvolvimento de Software - Especialização em DevOps Veja todos os Cursos de Engenharia de Software

2. Classe Interna Anônima

Uma classe interna anônima em Java é uma classe interna declarada sem nenhum nome de classe e para a qual apenas um único objeto é criado. Classes internas anônimas em Java são declaradas e instanciadas ao mesmo tempo. Eles são mais valiosos quando queremos substituir o método de uma classe ou interface.

A sintaxe para uma classe interna anônima em Java é a seguinte:

AnonymousInner an_inner = new AnonymousInner() {

public void meu_método() {

//código

}

};

Uma classe interna anônima em Java pode ser criada de duas maneiras:

  1. Usando classe
  2. Usando a interface

Classe interna anônima no exemplo Java (usando classe):

classe abstrata Refeição{

abstrato vazio comer();

}

class TestAnonymousInner{

public static void main(String args[]){

Refeição m=new Refeição(){

void eat(){System.out.println(“Bom apetite!”);}

};

eu no();

}

}

Saída: Bom apetite!

Classe interna anônima no exemplo Java (usando interface):

jogo de interface{

void play();

}

class TestAnnonymousInner1{

public static void main(String args[]){

Jogo g=novo Jogo(){

public void play(){System.out.println(“Jogos ao ar livre”);}

};

g.jogar();

}

}

Saída: jogos ao ar livre

3. Classe Interna Local

Uma classe interna local em Java é uma classe criada dentro de um método. Como no caso de variáveis ​​locais, o escopo da classe interna local permanece restrito dentro do método.

As classes internas locais são definidas dentro de um bloco: um corpo de método, uma cláusula if ou um loop for. Uma classe interna local não é membro de nenhuma classe delimitadora, mas, em vez disso, pertence ao bloco dentro do qual está definida. Assim, mesmo que uma classe interna local em Java não possa ter nenhum modificador de acesso associado a ela, você pode marcá-la como abstrata ou final. Se quisermos invocar os métodos de uma classe interna local, temos que instanciar a classe dentro do método.

Classe interna local no exemplo Java:

Abaixo está um programa de exemplo para demonstrar como instanciar o objeto de uma classe interna local declarada dentro do método de uma classe externa.

pacote innerClass;

classe pública Outer_Class

{

// Um ​​método de instância da classe Outer_Class.

exibição nula pública()

{

// Declaração de uma classe interna local do método.

classe Inner_Class

{

public void msg(){

System.out.println(“Esta é uma classe interna local!”);

}

}

// Cria uma instância de uma classe interna local de método e chama o método msg() usando a variável de referência de objeto i.

Inner_Class i = new Inner_Class();

i.msg();

}

public static void main(String[] args)

{

// Cria um objeto da classe externa Outer_Class.

Outer_Class o = new Outer_Class();

o.display();

}

}

Saída: Esta é uma classe interna local!

Com os fundamentos da classe interna Java em mente, vamos entender por que precisamos deles em primeiro lugar.

Vantagens da classe interna Java

Uma classe interna em Java traz três utilitários significativos para a mesa. Estes são os seguintes:

1. Como uma classe interna Java pode acessar os membros de dados e métodos da classe externa/principal, incluindo private, ela representa um tipo específico de relacionamento.

2. Uma classe interna Java reduz significativamente a codificação, pois requer menos para escrever.

3. Uma classe interna em Java agrupa logicamente classes e interfaces em um único local, aumentando assim a legibilidade do código e facilitando sua manutenção.

Resumindo

O conceito de classes aninhadas simplifica e adiciona flexibilidade à criação de classes em qualquer lugar da programação Java. Nesse sentido, uma classe aninhada não estática conhecida como classe interna é particularmente útil, como já vimos em nossa discussão até agora.

Gostaríamos de encerrar declarando duas instâncias em que o uso da classe interna parece mais apropriado. Primeiro, uma classe interna Java é ideal quando duas classes têm um relacionamento próximo e não são acessíveis por nenhuma outra classe. E segundo, as classes internas são comuns na manipulação de eventos de programação Java GUI. Portanto, as classes internas Java podem ser usadas com segurança onde os ouvintes e seus componentes GUI estão envolvidos.

Quer saber onde aprender Java?

Certificação PG vinculada ao trabalho do upGrad em Engenharia de Software é o que você procura!

Especialmente projetada para recém-formados e finalistas, a Certificação PG vinculada ao trabalho do upGrad em Engenharia de Software é perfeita para quem deseja aprender a programar e ser colocado em funções de software de nível básico. Este programa online de 5 meses ensinará as principais habilidades de software como Java, JavaScript, HTML5, DSA, AWS, MERN e muito mais!

Destaques do programa:

  • Especialização em MERN Stack/Cloud-Native
  • Mais de 500 horas de aprendizado online
  • Mais de 350 horas de treinamento prático
  • Mais de 50 sessões ao vivo
  • Cinco projetos da indústria
  • Networking com especialistas do setor
  • Fóruns de perguntas e respostas com colegas e especialistas do setor
  • Apoio de aprendizagem de assistentes de ensino e mentores da indústria

Inscreva-se hoje para aprender com os melhores do setor!

Qual é a diferença entre classe interna e subclasse?

Uma classe interna é uma classe aninhada ou definida dentro de outra classe. Por outro lado, uma subclasse é uma classe derivada de outra classe. Além disso, enquanto uma classe interna só pode ser acessada usando a referência da classe externa na qual ela está aninhada, uma subclasse pode ser acessada diretamente, a menos que a subclasse tenha herdado variáveis ​​privadas.

Podemos escrever uma classe dentro de uma classe em Java?

Sim, podemos definir uma classe dentro de outra classe em Java. Essa classe é conhecida como classe aninhada e nos permite organizar logicamente as classes em um só lugar, criando assim um código mais legível e de fácil manutenção. Como parte de sua classe delimitadora, uma classe aninhada pode ser declarada pública, privada, privada de pacote ou protegida.

A classe interna Java pode ser privada?

Sim, uma classe interna Java pode ser privada. Mas uma vez que uma classe interna é declarada privada, ela não pode ser acessada de um objeto que esteja fora da classe. As classes internas e externas têm acesso às variáveis ​​de instância e métodos privados umas das outras. Enquanto estivermos dentro da classe externa ou interna, os modificadores private e public têm o mesmo efeito.