Escolar Documentos
Profissional Documentos
Cultura Documentos
Capítulo 5
Reuso de Classes
Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
Licença para uso e distribuição
http://creativecommons.org/licenses/by-nc-sa/2.5/deed.pt
Você pode copiar, distribuir, exibir e executar a obra, além de criar obras
derivadas, sob as seguintes condições: (a) você deve dar crédito ao autor original,
da forma especificada pelo autor ou licenciante; (b) você não pode utilizar esta
obra com finalidades comerciais; (c) Se você alterar, transformar, ou criar outra
obra com base nesta, você somente poderá distribuir a obra resultante sob uma
licença idêntica a esta.
2
Março 2008 Desenvolvimento Orientado a Objetos com Java
Objetivos deste capítulo
4
Março 2008 Desenvolvimento Orientado a Objetos com Java
Composição
Sintaxe:
class Subclasse extends Superclasse {
}
Semântica:
A subclasse herda todos os atributos e métodos que a
superclasse possuir;
Subclasse é uma derivação, um subtipo, uma extensão
da superclasse.
8
Março 2008 Desenvolvimento Orientado a Objetos com Java
Herança
public class Produto {
protected String nome;
protected double preco;
System.out.println(l.ehCaro());
System.out.println(l.ehGrande());
}
}
11
Março 2008 Desenvolvimento Orientado a Objetos com Java
Subclasses herdam membros
12
Março 2008 Desenvolvimento Orientado a Objetos com Java
Sinônimos
Superclasse; Subclasse;
Classe base; Classe derivada;
Classe pai/mãe; Classe filha;
Classe ancestral; Classe descendente;
Etc. Etc.
13
Março 2008 Desenvolvimento Orientado a Objetos com Java
Sobrescrita de métodos
/* Definições anteriores... */
14
Março 2008 Desenvolvimento Orientado a Objetos com Java
Sobrescrita de métodos
class Produto { }
=
class Produto extends Object { }
17
Março 2008 Desenvolvimento Orientado a Objetos com Java
A classe Object
// Resultado:
// Computador()
// Notebook()
22
Março 2008 Desenvolvimento Orientado a Objetos com Java
Atenção à ordem de construção
class Computador {
public Computador() {
System.out.println("Computador()");
ligar();
}
public void ligar() { }
}
// Resultado:
// Computador()
// Código 0
// Notebook()
24
Março 2008 Desenvolvimento Orientado a Objetos com Java
Construtores com parâmetros
class Pessoa {
private String nome;
public Pessoa(String nome) {
this.nome = nome;
}
}
26
Março 2008 Desenvolvimento Orientado a Objetos com Java
Construtores com parâmetros
27
Março 2008 Desenvolvimento Orientado a Objetos com Java
Composição x herança
28
Março 2008 Desenvolvimento Orientado a Objetos com Java
Composição x herança
class Lista {
public void adic(int pos, Object obj) { }
public Object obter(int pos) { }
public void remover(int pos) { }
}
30
Março 2008 Desenvolvimento Orientado a Objetos com Java
Membros protegidos
public class A { import letras.*;
int x = 10; public class Um
protected void print() { extends A {
System.out.println(x); public void g() {
}
incr(); // OK!
protected void incr() {
x++; }
print(); // OK!
} // Erro: x++;
}
letras }
De maneira geral:
Atributos de uma classe devem ser privados;
Se a classe possui filhas, atributos podem ser
protegidos ou possuir métodos de acesso protegidos;
Métodos que pertencem à interface devem ser
públicos;
Alguns métodos podem ser utilizados internamente e,
portanto, serem privados ou protegidos.
32
Março 2008 Desenvolvimento Orientado a Objetos com Java
Vantagens da herança
33
Março 2008 Desenvolvimento Orientado a Objetos com Java
Polimorfismo
class Forma {
public void desenhar() {
System.out.println("Forma");
}
}
class Circulo extends Forma {
public void desenhar() {
System.out.println("Círculo");
}
}
class Quadrado extends Forma { /* ... */ }
class Triangulo extends Forma { /* ... */ }
34
Março 2008 Desenvolvimento Orientado a Objetos com Java
Polimorfismo
public class Teste {
private static void desenha(Forma[] fs) {
for (int i = 0; i < fs.length; i++)
fs[i].desenhar();
}
35
Março 2008 Desenvolvimento Orientado a Objetos com Java
Upcasting (Ampliação)
36
Março 2008 Desenvolvimento Orientado a Objetos com Java
Recapitulando...
O que já aprendemos:
Podemos fazer reuso com composição ou herança;
Os dois conceitos são muito usados em conjunto;
Subclasses herdam membros da superclasse;
Subclasses podem sobrescrever métodos;
Classe java.lang.Object é raiz da hierarquia;
A subclasse chama o construtor da superclasse;
protected é um friendly extensível às subclasses.
Prosseguindo...
É possível definir uma classe como não herdável?
37
Março 2008 Desenvolvimento Orientado a Objetos com Java
A palavra reservada final
39
Março 2008 Desenvolvimento Orientado a Objetos com Java
Referência constante
42
Março 2008 Desenvolvimento Orientado a Objetos com Java
Métodos finais
43
Março 2008 Desenvolvimento Orientado a Objetos com Java
Métodos privados são finais
44
Março 2008 Desenvolvimento Orientado a Objetos com Java
Classes finais
45
Março 2008 Desenvolvimento Orientado a Objetos com Java
Desenvolvimento Orientado a
Objetos com Java
Capítulo 5
Reuso de Classes
Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.