Classes Internas Pág. 14 a 29
description
Transcript of Classes Internas Pág. 14 a 29
Classes InternasPág. 14 a 29
Capítulo 1
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
Classe internapublic class ClasseExterna {
public int valor = 10;
public void calculaValor() {.......
}
public class ClasseInterna {private String temp;public void calcTemp() {
...}
}}
3
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
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
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
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”,
/* Envia um email ao aluno de forma assíncrona (thread). */
service.enviarEmailAoAluno(“Manuel”, “[email protected]”);
}}
7
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
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
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
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
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
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
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
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
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
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
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
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
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