Classe Interna

5 respostas
P
E  galera!!

 Procurei esclarecer uma dúvida, porém, ñ consegui.

 Para que serve uma Classe Interna??

 Por favor me expliquem c/ detalhes.

 Abs.

5 Respostas

bit_and_bit

É uma classe que é definida dentro de um arquivo classe.
1º As classes internas são invisiveis a todas as outras classes, o que significa que você não precisa se preocupar com conflitos de nome entre elas e outras classes. :wink:
2ºAs classes internas podem ter acesso a variáveis e métodos dentro do escopo de uma classe de alto nível que elas não teriam como uma clase separada. 8)

Um exemplo:

public class ArquivoClasse{
public ArquivoClasse(){ } //Contrutor

class ClasseInterna(){} //Classe interna

public static void main(String[] argumentos){} // parte mãe do program

}//fim da classe ArquivoClasse

Obs: Espero ter ajudado no entendimento de Class interna

ViniGodoy

Um exemplo real do uso de classes internas é quando você quer implementar uma interface, sem violar o encapsulamento de sua classe.

Veja esse exemplo:

Outra vantagem é, como o colega falou, ocultar classes que só fazem sentido associadas a classe principal. Por exemplo, suponha que você vá fazer uma classe ListaEncadeada. Toda lista encadeada é um conjunto de nós, mas o nó só tem sentido para a classe da lista. Então, porque deixar o nó publico? A classe No poderia ser uma classe interna privada da lista.

Mantu

Olá bit_and_bit, bem vindo ao GUJ! Vi que você postou um código fonte no seu post, mas com certeza você não leu esse tópico antes:
http://www.guj.com.br/posts/list/50115.java
Dê uma lida o mais rápido possível, ok? :thumbup:

Acho que você quis dizer “É uma que é classe definida dentro de uma outra classe”.

Cuidado com esse termo invisível, pois dá a impressão de que a classe interna em questão não pode ser “enxergada” pelas demais, ou seja, se outras classes podem criar referências e objetos do tipo dessa classe interna, o que é perfeitamente possível. Creio que o que você quis dizer é que o nome completo de uma classe interna inclui também o nome da classe que a contém. Por exemplo:

package br.com.guj;
public class Outer{
   //...
   public class Inner{
      //...
   }
   //...
}
package br.com.guj;
public class Inner{
   //...
}

Temos aí 3 classes distintas:
:arrow: br.com.guj.Outer
:arrow: br.com.guj.Outer.Inner
:arrow: br.com.guj.Inner
Então, como você mencionou, não haverá conflito de nomes, pois como eu disse, ao nome completo da classe interna é adicionado o nome da classe que a contém, como se esta fosse também um pacote.

1112

Mantu:
package br.com.guj; public class Outer{ //... public class Inner{ //... } //... }

package br.com.guj;
public class Inner{
   //...
}

Temos aí 3 classes distintas:
:arrow: br.com.guj.Outer
:arrow: br.com.guj.Outer.Inner
:arrow: br.com.guj.Inner
Então, como você mencionou, não haverá conflito de nomes, pois como eu disse, ao nome completo da classe interna é adicionado o nome da classe que a contém, como se esta fosse também um pacote.

Apenas complementando, br.com.guj.Outer.Inner só pode ser usada através de uma instância de br.com.guj.Outer, a menos que seja declarada como estática.

P

Obrigado à todos.

E a classe interna anônima, qual é a sua funcionalidade e necessaidade?

Exemplo: usa-se muito em Tratamento de Eventos.

Valw. :?:

Criado 9 de fevereiro de 2007
Ultima resposta 17 de fev. de 2007
Respostas 5
Participantes 5