Classes Internas Pág. 14 a 29

20
Classes Internas Pág. 14 a 29 Capítulo 1

description

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. - PowerPoint PPT Presentation

Transcript of Classes Internas Pág. 14 a 29

Page 1: Classes Internas Pág. 14 a 29

Classes InternasPág. 14 a 29

Capítulo 1

Page 2: 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

2

Page 3: Classes Internas Pág. 14 a 29

Classe internapublic class ClasseExterna {

public int valor = 10;

public void calculaValor() {.......

}

public class ClasseInterna {private String temp;public void calcTemp() {

...}

}}

3

Page 4: Classes Internas Pág. 14 a 29

Classe interna Na aplicação principal...

ClasseExterna objExt = new ClasseExterna();

System.out.println(objExt.valor);

objExt.calculaValor();

ClasseExterna.ClasseInterna objInt;

objInt = objExt.new ClasseInterna();

4

Page 5: Classes Internas Pág. 14 a 29

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:publicprotectedDefault (sem modificador)private

5

Page 6: Classes Internas Pág. 14 a 29

Classe interna (exemplo)public class AlunoService {

public void gravarAluno(int matricula, String nome, String email) {.......

}public void enviarEmailAoAluno(String nome, String email) {

Thread thread = new EmailAoAlunoThread();thread.start();

}private class EmailAoAlunoThread extends Thread {

public void run() {.......

}}

}

6

Page 7: Classes Internas Pág. 14 a 29

Classe interna (exemplo) Na aplicação principal...

public class Inicio {public static void main(String args[]) {

AlunoService service = new AlunoService();

/* Grava os dados do aluno na base de dados. */service.gravarAluno(1022, “Manuel”,

[email protected]”);

/* Envia um email ao aluno de forma assíncrona (thread). */

service.enviarEmailAoAluno(“Manuel”, “[email protected]”);

}}

7

Page 8: Classes Internas Pág. 14 a 29

Classe interna localpublic class ClasseExterna {

public int membroExterno = 3;

public void calculaValor() {final int local = 5;

class ClasseLocal {private int membroInterno = 8;public int calcTemp() {

return membroExterno * memboInterno* local;

}}

ClasseLocal local = new ClasseLocal();System.out.println(local.calcTemp());

}} 8

Page 9: Classes Internas Pág. 14 a 29

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).

9

Page 10: Classes Internas Pág. 14 a 29

Classe interna anônimapublic class ClasseExterna {

public void calculaValor() {

TipoX temp = new TipoX() {public void metodo1() {

...}

};

temp.metodo1();}

}... onde TipoX é uma interface, classe abstrata ou classecomum previamente declarada com o metodo1();

10

Page 11: Classes Internas Pág. 14 a 29

Classe interna anônima (exemplo)public class CadastroAluno extends JFrame {

private JButton btnOK = new JButton();private JPanel pnlRaiz = (JPanel) getContentPane();

public CadastroAluno() {btnOk.setBounds(100, 80, 60, 30);btnOk.setText(“Clique aqui”);btnOk.addActionListener( new ActionListener() {

void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null, “Olá!”);}

} );pnlRaiz.add(btnOk);

}} 11

Page 12: Classes Internas Pág. 14 a 29

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.

12

Page 13: Classes Internas Pág. 14 a 29

Classe interna anônima Forma Geral

public inteface InterfaceExemplo {public void metodo1();public void metodo2();

}

InterfaceExemplo variavel = new InterfaceExemplo() {public void metodo1() {

.....}public void metodo2() {

.....}

};

variavel.metodo1();variavel.metodo2();

13

... dentro de algum método

Page 14: Classes Internas Pág. 14 a 29

Classe interna estáticapublic class ClasseExterna {

public static int valor = 10;

public static void calculaValor() {.......

}

public static class ClasseInterna {private String temp;public void calcTemp() {

...}

}}

14

Page 15: Classes Internas Pág. 14 a 29

Classe interna estática Na aplicação principal...

ClasseExterna objExt = new ClasseExterna();

System.out.println(ClasseExterna.valor);

ClasseExterna.calculaValor();

ClasseExterna.ClasseInterna objInt;

objInt = new ClasseExterna.ClasseInterna();

Não é necessário criar instância

15

Page 16: Classes Internas Pág. 14 a 29

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.

16

Page 17: Classes Internas Pág. 14 a 29

Classes aninhadas Embora seja pouco recomendado, as classes

podem ser “internalizadas” em diversos níveis

public class Alpha {public void metodo1() {

System.out.println(“Metodo da classe Alpha");

}protected class Beta {

public void metodo2() {System.out.println(“Metodo da

classe Beta");}private class Gama {

public void metodo3() {System.out.println(“Metodo

da classe Gama");}

}}

}17

Page 18: Classes Internas Pág. 14 a 29

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;

18

Page 19: Classes Internas Pág. 14 a 29

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;

19

Page 20: Classes Internas Pág. 14 a 29

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:

Roda Aro Liga-leve------------------------------

----- --------------

dianteira-esquerda 17 Simdianteira-direita 17 Simtraseira-esquerda 36 Nãotraseira-direita 36 Não

20