metodoZ(){ System.out.println("Z pai"); }} class ClasseFilho extends ClassePai { @Override public void metodoY(){ System.out.println("Y filho"); } public void metodoW(){ System.out.println("w filho"); }} publicclassClasseTesteSobrescricao{ publicstatic voidmain(String ...args){ ClassePaip = new ClasseFilho(); p.metodoX();//Ok roda referencia pai imprime Xpai p.metodoY();//Ok roda imprime Y filho(sobrescreve) p.metodoW();//ERRO DE COMPILACAO ClasseFilhoo = new ClasseFilho(); o.metodoX();//Ok roda referencia pai imprime Xpai o.metodoY();//Ok roda imprime Y filho(sobrescreve) o.metodoW();//ok }}Saida:XpaiYfilhoXpaiYfilhowfilho Eaconselhavel sempre que for sobrescrever um metodo, colocar aanotacao @Override isso vai informar ao compilador que voce jaesta esperando sobrescrever um metodo que deveria ser herdado.Assimcaso aassintura do metodo que estejasobrescrevendo naoexista,um erro de compilacao sera gerado. Entendidoisto, me sinto muito mais seguro que este conceito esta bemcompreendido, dareicontinuidade ao assunto principal.ClassesInternas anonimas Saochamadas de classes internas anonimas por alem de serem internasconforme as classes que temos apresentado neste post e no anterior,seus nomes nao sao definido ao declararmos uma classe. Existemduas formas diferentes de definirmos uma classe interna anonima efalarei de ambas aqui. Agoravejamos esta classe ClasseNormal que definimos logo aquiabaixo:publicclassClasseNormal{ publicvoidteste(){ System.out.println("Exemplode uma classe"); }//...muitomais metodos implelementados abaixo} Agoravamos supor que queremos em apenas um momento criar uma classe iguala definida acima mas que necessita sobrescrever este primeiro metodoe todos os outros pudessem ser aproveitados.Estee o momento de usarmos as classes anonimas conforme abaixo:publicclassClasseInternaAnonima { publicstaticvoidmain(String... args){ ClasseNormaliia= newClasseNormal(){ publicvoidteste() { System.out.println("Exemplode classe interna anonima"); } }; iia.teste();//iraimprimir o metodo sobrescrito Exemplode classe interna anonima '''' //queutilize dos outros metodos ja desenvolvidos da class }} Temosacima um exemplo simples de classe anonima. Ela nao possui nome massabemos dizer quais sao suas caracteristicas, aideia aqui e sobrescrever qualquermetodo que a classe ClasseNormal possui. Vale lembrar que se poralgum motivo definiralgum metodo que a ClasseNormal nao possui, estemetodo nao podera ser utilizado poisa classe de referenciae a ClasseNormal. Umacaracteristica importante de se notar ao ver uma classe anonima eo ponto e virgula (;), isto porque nao e comum e nao estamosacostumados colcar no final de uma classe mas e necessario ou ocompilador ira acusar. Asclasses anonimas podem inclusive implementar ou estender umaoutra classe. Mas veja bem o que acabei de dizer, apenas uma e ouimplementa ou se estende. Nao e possivel fazer os dois assim comonao e possivel implementar mais de uma interface, quanto aestender uma classe isso ja se e previsto. :)Podemosentao criar uma classe anonima que implemente uma interface daseguinte forma:publicinterfaceInterfaceInternaAnonima { publicvoidteste();}classAux { voidexemplo(InterfaceInternaAnonima f){ System.out.println("exemplo"); f.teste(); }}publicclassClasseInternaAnonima { publicstaticvoidmain(String... args){ Auxb= newAux(); b.exemplo(newInterfaceInternaAnonima() { publicvoidteste() { System.out.println("Exemplode classe interna anonima"); } }); }}Aproveitopara lhes apresentar a segunda forma de se declarar uma classeanonima :) Aqui,ao inves de declararmos a classe como uma variavel de instancia,estamos a declarando para passar um parametro que por ser umainterface, exige que implemente ainda o metodo teste() ou ocompilador acusara erro de metodo(s) nao implementado(s) e parafinalizar esta estrnha forma de se delcarar uma classe, ja antecipoa resposta de sua possivel pergunta, nao, nao e necessariocolocarmos a palavra implements,o compilador ja percebera que e uma interface e que sera umaclasse anonima fazendo desnecessario a colocacao da paravra-chaveque define que ira implementar uma interface.Classesestaticasaninhadas Ultimoitem a ser discutido aqui, mas nao menos importante