Classesinternas sao aquelas que sao definidas dentro de uma outra classe.Ultimamente difificeis de serem encontrdas em uma aplcacao porserem mal vistas por nao trazerem uma aparencia familiar. Maspodem oferecer grandes beneficios quando bem desenhadas dentro deuma aplicacao. Integradasao java a partir da versao 1.1 onde ainda era muito utilizado a APISWING, as classes internas davam muita facilidade para o desenvolvimento de aplicacoes com interace grafica trazendoeficientes formas de desenvolver algo em situacoes especifiacas.Deixando inclusive mais facil de ler e de realizar manutencao. Tiveo privilegio de trabalhar no DATASUS usando esta API e foi quandomais me deparei com estas classes que a principio podem machucara vista mas que depois que se entende, muito se pode tirarproveito desta funcionalidade. Emgeral as classes internas proporciona que voce defina uma classedentro da outra viabilizando novas funcionalidades para suas classesja que podera fazer com que uma classe seja menmbro da outra. Damesma forma que uma classe possui variaveis e metodos-membros, elaspoderao ter classes memboros.Elaspodem ser definidas de 4 formas diferentes:Classes Internas ComumClasses Internas locais de metodosClasses Internas anonimasClasses estaticas Ainstancia de uma classe interna compartilha todas as informacoesda classe externa. Esse relacionamento especial concede ao codigo daclasse interna acesso a membros da classe que estiver encapsulada(externa) como se a classe interna fizesse parte da externa. O que naverdade nao deixa de ser. Debemoslembrar que sempre que estivermos utilizando uma classe interna,teremos acesso aos membros privados da instancia da classe externa naverdade, todos os membros da classe externa e vice-versa. Alem dapropria classe interna ser um membro-classe da classe extena, elaspossuem um relacionamento intimo e isso so nos beneficia caso oprojeto seja bem arquitetado.Codificandoa Classe interna Comum Umaclasse interna comum podera ser definida da mesma forma que qulqueroutro membro (atributo ou metodo) de uma classe, com excecao dadefinicao static. Logo,podemos usar modificadores em uma classe interna com as seguintespalavras reservadas do java:finalabstractpublicprivateprotectedstrictfp Apesarde nao ser possivel utilizar a palavra reservada static emclasses, veremos que sera possivel tal abordagem da declaracaode classes internas. Mas nao falarei sobre este caso agora por suascaracteristicas serem um pouco diferentes, desta forma falareiseparadamente no ultimo topico destes post sobre classes internasestaticas.Tendofalado das definicoes e das possiveis formas de se declarar umaclasse interna, vamos ao codigo <o/ Parase declarar uma classe interna, podemos simplesmente definir umaclasse dentro de outra classe conforme abaixo:publicclassClasseExterna { publicstaticvoidmain(String... args){ System.out.println("VaiMedina!! #BrazilianStorm"); } classClasseInterna { }//fechaclasseinterna}//fechaclasseexterna Umaobservacao interessante e que se voce gosta de compilar rodar asclasses pelo terminal, ao executar o comando:$ javac ClasseExterna.javaNotaraque serao criado 2 arquivos com extensao .classClasseExterna.classClasseExterna$ClasseInterna.class Diferentedo que se possa imaginar, e possivel executar a classe interna soque seu comportamento sera como se executasse a classe extena, issoquer dizer que se executarmos o codigo acima conforme abaixoteremos:$ javac ClasseExterna.java$java ClasseExterna$ClasseInternaVaiMedina!! #BrazilianStorm Valelembrar que estou usando Java 7 pois ate onde sei pelos livros decertificacao de java 5 isto nao deveria ser possivel.Acessandomembros e Instanciando uma classe Interna Paracomecarmos lembramos que uma instancia e um objeto que usa comoreferencia os atributos de uma classe. Como uma classe interna naodeixa de ser um membro da classe externa, a classe interana teracomo acessar qualquer outro membro