1 / 20

Classes Internas Pág. 14 a 29

Capítulo 1. Classes Internas Pág. 14 a 29. Classes internas. Classe interna Instância da classe interna Referências na classe interna Modificadores de membros. Classe interna local Classe interna anônima Classe interna estática Classes aninhadas. Classe interna.

calla
Download Presentation

Classes Internas Pág. 14 a 29

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Capítulo 1 Classes InternasPág. 14 a 29

  2. Classes internas • Classe interna • Instância da classe interna • Referências na classe interna • Modificadores de membros • Classe interna local • Classe interna anônima • Classe interna estática • Classes aninhadas

  3. Classe interna publicclassClasseExterna { publicintvalor = 10; publicvoidcalculaValor() { ....... } publicclassClasseInterna { private String temp; publicvoidcalcTemp() { ... } } }

  4. Classe interna • Na aplicação principal... ClasseExternaobjExt = newClasseExterna(); System.out.println(objExt.valor); objExt.calculaValor(); ClasseExterna.ClasseInternaobjInt; objInt = objExt.newClasseInterna();

  5. Classe interna • Uma classe interna é tratada como um dos membros da classe externa. • Como tal, a classe interna pode possuir qualquer um dos modificadores de acesso abaixo: • public • protected • Default (sem modificador) • private

  6. Classe interna (exemplo) publicclassAlunoService { publicvoidgravarAluno(int matricula, String nome, String email) { ....... } publicvoidenviarEmailAoAluno(String nome, String email) { Thread thread = newEmailAoAlunoThread(); thread.start(); } privateclassEmailAoAlunoThreadextends Thread { publicvoidrun() { ....... } } }

  7. Classe interna (exemplo) • Na aplicação principal... publicclassInicio { publicstaticvoidmain(String args[]) { AlunoServiceservice = newAlunoService(); /* Grava os dados do aluno na base de dados. */ service.gravarAluno(1022, “Manuel”, “manuel@portugal.com”); /* Envia um email ao aluno de forma assíncrona (thread). */ service.enviarEmailAoAluno(“Manuel”, “manuel@portugal.com”); } }

  8. Classe interna local publicclassClasseExterna { publicintmembroExterno = 3; publicvoidcalculaValor() { finalint local = 5; classClasseLocal { privateintmembroInterno = 8; publicintcalcTemp() { returnmembroExterno * memboInterno* local; } } ClasseLocal local = newClasseLocal(); System.out.println(local.calcTemp()); } }

  9. Classe interna local • Uma classe interna local pode ser utilizada apenas dentro do método em que foi criada. • Desta forma, uma classe interna local não deve possuir modificadores de acesso (public, private, etc). • Uma classe interna local só pode utilizar uma variável local ao método onde ela se encontra se a variável local for uma constante (final).

  10. Classe interna anônima publicclassClasseExterna { publicvoidcalculaValor() { TipoXtemp = newTipoX() { publicvoidmetodo1() { ... } }; temp.metodo1(); } } ... onde TipoX é uma interface, classe abstrata ou classe comum previamente declarada com o metodo1();

  11. Classe interna anônima (exemplo) publicclassCadastroAlunoextendsJFrame { privateJButtonbtnOK = newJButton(); privateJPanelpnlRaiz = (JPanel) getContentPane(); publicCadastroAluno() { btnOk.setBounds(100, 80, 60, 30); btnOk.setText(“Clique aqui”); btnOk.addActionListener( newActionListener() { voidactionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, “Olá!”); } } ); pnlRaiz.add(btnOk); } }

  12. Classe interna anônima • Ao criar uma classe anônima, estamos implementando ou estendendo uma classe ou interface para uso imediato; • Ao criar uma classe anônima, podemos: • Implementar uma interface com os seus métodos; • Estender uma classe abstrata implementando os seus métodos abstratos; • Estender uma classe comum sobrescrevendo algum de seus métodos.

  13. Classe interna anônima • Forma Geral publicintefaceInterfaceExemplo { publicvoidmetodo1(); publicvoidmetodo2(); } InterfaceExemplovariavel = newInterfaceExemplo() { publicvoidmetodo1() { ..... } publicvoidmetodo2() { ..... } }; variavel.metodo1(); variavel.metodo2(); ... dentro de algum método

  14. Classe interna estática publicclassClasseExterna { publicstaticintvalor = 10; publicstaticvoidcalculaValor() { ....... } publicstaticclassClasseInterna { private String temp; publicvoidcalcTemp() { ... } } }

  15. Classe interna estática • Na aplicação principal... ClasseExternaobjExt = newClasseExterna(); System.out.println(ClasseExterna.valor); ClasseExterna.calculaValor(); ClasseExterna.ClasseInternaobjInt; objInt = newClasseExterna.ClasseInterna(); Não é necessário criar instância

  16. Classe interna estática • Uma classe interna estática é semelhante a uma classe comum, sendo sua classe externa semelhante a um package. • Geralmente uma classe interna estática é utilizada como uma classe pública auxiliar de sua classe externa.

  17. Classes aninhadas • Embora seja pouco recomendado, as classes podem ser “internalizadas” em diversos níveis publicclassAlpha { publicvoid metodo1() { System.out.println(“Metodo da classe Alpha"); } protectedclass Beta { publicvoid metodo2() { System.out.println(“Metodo da classe Beta"); } privateclass Gama { publicvoid metodo3() { System.out.println(“Metodo da classe Gama"); } } } }

  18. Exercício (parte 1) • Crie uma classe chamada Carro contendo uma classe interna pública e estática chamada Roda; • A classe interna Roda deverá possuir 2 atributos: aro (int) e ligaLeve (boolean) e seus respectivos métodos get e set. Também deverá conter um método construtor público contendo ambos os atributos;

  19. Exercício (parte 2) • A classe externa Carro deverá possuir 4 atributos: • rodaDianteiraEsquerda (tipo Roda); • rodaDianteiraDireita (tipo Roda); • rodaTraseiraEsquerda (tipo Roda); • rodaTraseiraDireita (tipo Roda). ... e seus respectivos métodos get e set; • A classe externa Carro também deverá possuir um método construtor que permitirá inicializar o carro com os atributos descritos acima;

  20. Exercício (parte 3) • Crie uma classe CarroStart contendo o método main() que deverá criar uma instância da classe Carro assinalando nesta 4 instâncias da classe Roda e, em seguida exiba os dados da instância da classe Carro conforme abaixo:

More Related