Baixe o app para aproveitar ainda mais
Prévia do material em texto
Curso de Licenciatura em Computação Disciplina: Programação III Professor: Rafael Cunha Cardoso rafaelcardoso@ifsul.edu.br Classe Object e Polimorfismo PIII Classe Object 2 Pai de todas as classes. Toda classe que não estende outra explicitamente é subclasse da classe Object. public class Pessoa { private String nome; public String getNome() { return nome; } } public class Pessoa extends Object { private String nome; public String getNome() { return nome; } } É o mesmo que:Isso: A classe Object possui 11 métodos. Entre eles o método toString(), o qual que retorna uma String com a representação do objeto que chamou o método. PIII 3 Método toString() public class Pessoa{ private String nome; public Pessoa (String nome){ this.nome = nome; } public String getNome(){ return this.nome; } public String getNome(){ return “Nome:” + this.nome; } } public class Exemplo { public static void main(String args[]){ Pessoa p = new Pessoa(“Ana”); System.out.println(p); } } É usual sobrescrever o método toString() O principal objetivo de se fazer isso, é fornecer uma descrição relevante do objeto que está sendo descrito. Pessoa@2c8d66b2Nome: Ana PIII Polimorfismo PIII Polimorfismo 5 Polimorfismo: poli=muitos, morfi=forma Característica que permite usar uma variável de uma superclasse para referenciar objetos de uma subclasse. Produto #preco:double +Produto(preco:double) +exibe() Fogao -qdeBocas:int +Fogao(preco:double,qdeBocas:int) +exibe() Bicicleta -qMarchas:int +Bicicleta(preco:double, qMarchas:int) +exibe() A referência muda o comportamento conforme o objeto que está associado a ela. PIII 6 Polimorfismo public class Produto { protected double preco; public Produto(double preco) { this.preco = preco; } public void exibe() { System.out.println(“Produto: “); System.out.println(“Preco:“ + preco); } } public class Fogao extends Produto { private int qdeBocas; public Fogao(double preco, int qdeBocas) { super(preco); this.qdeBocas = qdeBocas; } public void exibe() { System.out.println(“Fogao: “); System.out.println(“Preco: “ + preco); System.out.println(“Bocas: “ + qdeBocas); } } public class Bicicleta extends Produto { private int qMarchas; public Bicicleta(double preco, int qMarchas){ super(preco); this.qMarchas = qMarchas; } public void exibe() { System.out.println(“Bicicleta: “); System.out.println(“Preco: “+preco); System.out.println(“Marchas: “+qMarchas); } } Produto #preco:double +Produto(preco:double) +exibe() Fogao -qdeBocas:int +Fogao(preco:double,qdeBocas:int) +exibe() Bicicleta -qMarchas:int +Bicicleta(preco:double, qMarchas:int) +exibe() PIII 7 Polimorfismo public class Produto { protected double preco; public Produto(double preco) { this.preco = preco; } public void exibe() { System.out.println(“Produto: “); System.out.println(“Preco:“ + preco); } } public class Fogao extends Produto { private int qdeBocas; public Fogao(double preco, int qdeBocas) { super(preco); this.qdeBocas = qdeBocas; } public void exibe() { System.out.println(“Fogao: “); System.out.println(“Preco: “ + preco); System.out.println(“Bocas: “ + qdeBocas); } } public class Bicicleta extends Produto { private int qMarchas; public Bicicleta(double preco, int qMarchas){ super(preco); this.qMarchas = qMarchas; } public void exibe() { System.out.println(“Bicicleta: “); System.out.println(“Preco: “+preco); System.out.println(“Marchas: “+qMarchas); } } public class Polimorfismo { public static void main(String args[]){ Produto p1, p2, p3; p1 = new Produto(100.0); p2 = new Fogao(150.0,2); p3 = new Bicicleta(600.0,10); p1.exibe(); p2.exibe(); p3.exibe(); } } Qual exibe é chamado? PIII 8 Polimorfismo p1 = new Produto(100.0); p2 = new Fogao(150.0,2); p3 = new Bicicleta(600.0,10); Fogao é um Produto Bicicleta é um Produto 100.0preco p1 preco 150.0 2qdeBocasp2 preco 600.0 10qMarchas p3 public class Polimorfismo { public static void main(String args[]){ Produto p1, p2, p3; p1 = new Produto(100.0); p2 = new Fogao(150.0,2); p3 = new Bicicleta(600.0,10); p1.exibe(); p2.exibe(); p3.exibe(); } } Produto: Preco:100.0 Fogao: Preco: 150.0 Bocas: 2 Bicicleta: Preco: 600.0 Marchas: 10 Polimorfismo permite usar uma variável de uma superclasse para referenciar objetos de uma subclasse. PIII 9 Polimorfismo – outro exemplo de uso ListaDeProdutos -n:int +ListaDeProdutos(qdeMaxima:int) +inclui(p:Produto) +exibeTodos() Produto #preco:double +Produto(preco:double) +exibe() Bike -qMarchas:int +Bicicleta(preco:double, qMarchas:int) +exibe() vet[] 0..* null null vet [0] [1] [2] [3] [4] Fogao Bike Fogao Uma classe para armazenar uma lista de instância de Produto Fogao -qdeBocas:int +Fogao(preco:double, qdeBocas:int) +exibe() PIII 10 Classe ListaDeProdutos public class ListaDeProdutos { private Produto vet[]; private int n; public ListaDeProdutos(int qtdMax){ vet = new Produto[qtdMax]; n=0; } public void inclui(Produto p) { if (n < vet.length) vet[n++] = p; } public void exibeTodos() { for (int i=0; i<n; i++) vet[i].exibe(); } } public class ExemploLista { public static void main(String args[]){ ListaDeProdutos lista; lista = new ListaDeProdutos(5); lista.inclui(new Fogao(200.0,4)); lista.inclui(new Bicicleta(450.0,10)); lista.inclui(new Fogao(300.0,6)); lista.exibeTodos(); } } Para permitir a inclusão de um novo produto (ex: Geladeira), o que deve ser modificado? PIII 11 Classe ListaDeProdutos public class ExemploLista { public static void main(String args[]){ ListaDeProdutos lista; lista = new ListaDeProdutos(5); lista.inclui(new Fogao(200.0,4)); lista.inclui(new Bike(450.0,10)); lista.inclui(new Fogao(300.0,6)); lista.inclui(new Geladeira(700.0,400)); lista.exibeTodos(); } } public class Geladeira extends Produto{ private int capacidade; public Geladeira(double preco, int capacidade){ super(preco); this.capacidade = capacidade; } public void exibe() { System.out.println(“Geladeira: “); System.out.println(“Preco: “ + preco); System.out.println(“Capacidade: “ + capacidade); } } PIII Conversão entre objetos PIII Ampliação (UpCasting) 13 public class Ampliacao { public static void main(String args[]) { ListaDeProdutos lista; Produto p1 = new Fogao(200.0,4); Fogao f = new Fogao(300.0,6); Produto p2 = f; lista = new ListaDeProdutos(5); lista.inclui(new Fogao(200.0,4)); ... } } Conversão da referência de uma subclasse para uma superclasse. Ocorre automaticamente (implícita). Espera um parâmetro da classe Produto Fogao é um Produto PIII 14 No upcasting, o método deve existir na superclasse para ser utilizado. public class Fogao extends Produto { ... public int getQuantidadeBocas() { return qdeBocas; } ... } Incluindo um novo método na classe Fogao public class Exemplo { public static void main(String args[]) { Produto p = new Fogao(300.0,6); int qb = p.getQuantidadeBocas(); System.out.println("Bocas: “ + qb); } } Exemplo.java:5: cannot find symbol symbol : method getQuantidadeBocas() location: class Produto int qb = p.getQuantidadeBocas(); ^ 1 error A classe Produto não possui o método getQuantidadeBocas() public class Produto { protected double preco; public Produto(double preco) { this.preco = preco; } public void exibe() { System.out.println(“Produto: “); System.out.println(“Preco:“ + preco); } } PIII 15 public class Downcasting { public static void main(String args[]) { int qb; Produto p = new Fogao(300.0, 6); Fogao f = (Fogao) p; qb = f.getQuantidadeBocas(); System.out.println("Bocas: " + qb); // ou qb = ((Fogao)p).getQuantidadeBocas(); System.out.println("Bocas: " + qb); } } Conversão da referência de uma superclasse para uma subclasse. Deve ser explicitado. Redução (DownCasting) Bocas: 6 Bocas: 6 PIII Polimorfismo e a classe Object 16 Polimorfismo com a classe Object. ArrayList – classe que armazena Object- método add(Object obj) Todas as classes são subclasses de Object. Dessa forma podemos armazenar objetos de qualquer classe. import java.util.ArrayList; public class ArrayListJogador { public static void main(String args[]){ ArrayList lista = new ArrayList(); lista.add(new Jogador("Zé",4)); lista.add(new Jogador("Mané",8)); lista.add(new Jogador("Odair",10)); System.out.println(lista); } } Como permitir que os nomes sejam impressos? [Jogador@3e25a5, Jogador@19821f, Jogador@addbf1] PIII 17 Classe Jogador e método toString() O método toString() da classe ArrayList possui uma chamada ao método toString() dos objetos armazenados. public class Jogador { private String nome; private int camiseta; public Jogador(String n, int cam){ nome = n; camiseta = cam; } public String toString() { return nome; } ... } Para permitir a impressão correta: Implementar toString() na classe Jogador. [Zé, Mané, Odair] import java.util.ArrayList; public class ArrayListJogador { public static void main(String args[]){ ArrayList lista = new ArrayList(); lista.add(new Jogador("Zé",4)); lista.add(new Jogador("Mané",8)); lista.add(new Jogador("Odair",10)); System.out.println(lista); } } Curso de Licenciatura em Computação Disciplina: Programação III Professor: Rafael Cunha Cardoso rafaelcardoso@ifsul.edu.br Classe Object e Polimorfismo
Compartilhar