Laboratório de Java Polimorfismo e Acoplamento Dinâmico (Lab. III) Prof. Guido Araújo Coerção automática byte para short, int, long, float, double short para int, long, float, double char para int, long, float, double int para long, float double long para float, double float para double Upcasting vs. Downcasting static public void main() { int i; float f; } f = (float) i; Upcasting: Não perde informação i = (int) f; Downcasting: Perde informação Exercício 1 1. Do diretório contaCor • • ContaCor.java ExemploCoercao.java 2. Compilar todos. • • • • • Algum erro ? Mude os tipos das variáveis de main() para int O que aconteceu ? Mude agora para float E agora ? Exercício 2(a) (extra) 1. Definir um novo construtor para ContaCor • • Parâmetros: nome, num e senha Utilizar this para evitar repetição de código 2. Modificar construtor anterior para que ele use o que você acabou de definir 3. Implementar métodos que retornam: • titular, numConta e senha Exercício 2(b) (extra) 1. Definir um programa ExemploDoisConstrutores • • • Crie dois objetos ContaCor Recebem mesmos valores de titular, numConta e senha Primeiro objeto: usar construtor de quatro parâmetros • • • Valor saldoAtual recebe zero Segundo objeto: usar construtor de 2(a) Incluir código que imprima membros dos objetos 2. Compilar e executar. Exercício 3 (extra) 1. Incluir em ContaCor • • • Lista de dependentes: String[ ] Método para listar dependentes Construtor adicional: • • Nome titular, saldo inicial, número da conta, senha e lista dedependentes Usar outros construtores na implementação 2. Compilar e executar. instanceof • instanceof – Testa se um objeto é de um determinado tipo – Retorna true se for verdadeiro { : ContaCor conta; if (conta instanceof ContaEsp)…. : } Sobrecarga de Nomes ContaCor -nome do Titular -número da conta -senha -saldo atual +debitaValor() class ContaCor { : public debitaValor(float val) { : } } ESCONDE !! ContaEsp +limite -debitaValor class ContaEsp extends ContaCor { : public debitaValor(float val) { : } } Polimorfismo (Upcasting) class A { public void metodo() { : } } B b = new B(); b.metodo(); b = new A(); class B extends A { b.metodo(); public void metodo() { : } } Upcasting Polimorfismo (Downcasting) class A { public void metodo() { : } A a = new A(); } a.metodo(); OK !! a = new B(); class B extends A { a.metodo(); public void metodo() { : } } Downcasting Downcasting sem Redefinição class A { public void metodo() { : } A a = new A(); } a.metodo(); class B extends A { a = new B(); public void somenteB() { : } } a.somenteB(); NÃO FUNCIONA !!! Downcasting Polimorfismo sem Redefinição com Coerção class A { public void metodo() { : } A a = new A(); } a.metodo(); class B extends A { a = new B(); public void somenteB() { : } } ( (B) a).somenteB(); MAS DÁ CERTO COM CASTING !!! Exercício 4 1. Arquivos no diretório casting 2. Estudar cada um dos programas. Compilar e executar entendendo o que está ocorrendo. Exercício 5 1. Arquivos no diretório contaCor • • • ContaCor.java ContaEsp.java ExemploPolimorfismoComRedefinição.java 2. Compilar todos e executar o último • • • Porque falhou ? Comentar linhas 15 e 16 E agora ? Qual o resultado ? 3. Como modificar o código para que funcione removendo os comentários ? final class A { final public void metodo() { : } PERMITE INLINE } class B extends A { public void metodo() { : } } NÃO PODE REDEFINIR MÉTODO É FINAL Exercício 6 1. Adicione final ao método debitaValor de ContaCor • • • Compilar ContaEsp O que ocorreu ? Você saberia explicar ? Exercício 7 (extra) 1. Arquivos do diretório veículos • • • • • FilaVeiculo.java Veiculo.java Carro.java Caminhão.java Inicial.java 2. Compile e execute classe Inicial.java 3. Ler os seguites códigos: • • mostraFila() de FilaVeiculo mostra() de Carro, Caminhão e Veiculo Exercício 8 (cont.) (extra) 1. Comentar segunda linha de mostra() em Veiculo 2. Recompilar e executar Inicial.java • O que ocorreu ? 3. Desfazer modificação 4. Comentar a última linha de mostra() de Carro • • Recompilar e executar Inicial O que mudou ? 5. Alterar mostra() em Carro para private • • Recompilar e executar O que significa o resultado