Lab. III - IC

Propaganda
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
Download