Laboratório de Java
Herança e Agregação
(Lab II)
Prof. Guido Araújo
Herança
ContaCor
-nome do Titular
-número da conta
-senha
-saldo atual
+creditaValor()
+debitaValor()
+obtemSaldo()
class ContaCor {
:
private String titular;
private int numConta;
private int senha;
private double saldoAtual;
:
}
ContaEsp
+limite
-alteraLimite()
-getCreditoUtilizado()
class ContaEsp extends ContaCor {
private double limite;
:
}
Herança (cont.)
ContaCor
-nome do Titular
-número da conta
-senha
ContaCor
-saldo atual
+creditaValor()
+debitaValor()
+obtemSaldo()
Herança (cont.)
ContaEsp
-nome do Titular
-número da conta
ContaEsp
-senha
-saldo atual
-limite
ContaCor
+creditaValor()
+debitaValor()
+obtemSaldo()
+alteraLimite()
+getCreditoUtilizado()
Usando super
class ContaCor {
protected String titular;
protected int numConta;
protected String titular;
protected double saldoAtual;
:
Conta(String nome, float val, int num, int pwd) {
titular = nome;
:
}
}
class ContaEsp extends ContaCor {
double limite;
ContaEsp (String nome, float val, int num, int pwd) {
super(nome, val, num, pwd);
numConta = 1234;
limite = 200;
}
:
}
Exercício 1
1. Do diretório documento
•
•
•
•
Documento.java
Carta.java
Telegrama.java
ExemploDocumento2.java
2. Compilar todos.
3. Executar e estudar ExemploDocumento2.java e
entender o que está ocorrendo.
Exercício 2
1. Definir CartaRegistrada
•
•
Carta
subclasse de Carta
atributos: data e local
CartaRegistrada
2. Definir Encomenda
•
•
subclasse de CartaRegistrada
atributo: conteudo
Encomenda
Exercício 3
1. Implemente um programa que cria objetos:
•
•
CartaRegistrada
Encomenda
2. Chame o método imprimir de cada objeto.
3. Compile e execute.
Visibilidade Protegida
class ContaCor {
:
protected double saldoAtual;
:
}
class ContaEsp extends ContaCor {
:
public float getCreditoUsado {
return
saldoAtual > limite ? 0 : limite – saldoAtual;
}
}
Viola regra:
Membros devem ser privados !!
Visibilidade Protegida
class ContaCor {
:
private double saldoAtual;
:
protected float getSaldoAtual() {
}
Agora sim
class ContaEsp extends ContaCor {
:
public float getCreditoUsado {
return
getsaldoAtual() > limite ? 0 : limite – getsaldoAtual();
}
}
!! Via método protegido
Exercício 4
1. Do diretório contaCor:
•
•
•
ContaCor.java
ContaEsp.java
ExemploConta.java
2. Compilar as três classes e executar a última
•
•
•
O que aconteceu durante a compilação de ContaEsp?
Você saberia explicar ?
Como usar protected para contornar isto ?
Existe outra solução?
Herança vs. Agregação
class ContaCor {
:
}
ContaEsp É-UMA ContaCor
class ContaEsp extends ContaCor {
:
}
class Motor {
:
}
Carro CONTÉM Motor
class Carro {
Motor motor;
:
}
Exercício 5
1. Do diretório veiculos:
•
Carro.java
2. Definir e agregar a classe abaixo à Carro.
•
Motor
3. Definir os seguintes métodos para Motor
•
•
ligar
isLigado
4. Definir os seguinte métodos para Carro
•
•
ligar
isLigado
Exercício 6 (extra)
1. Definir nova classe Caminhao:
•
•
numEixos
capacidade
2. Projete um construtor
3. Projete programa ExemploCaminhao
•
Instacia caminhão e imprime eixos e carga
4. Carros e caminhões são parecidos
•
Como evitar repetir operações em comuns ?
Exercício 7 (extra)
1. Definir nova classe Aviao
2. Atributos
•
•
Tanque combustível (idêntico ao anterior)
Duas turbinas (parecida com Motor)
•
•
•
potência máxima
potência atual (%)
Compartimento de carga:
•
•
capacidade máxima
capacidade atual (%)
3. Projete um construtor para inicialização
4. Projete ExemploAviao e voe…
Exercício 8 (extra)
1. Do diretório fila:
•
•
•
Lista.java
Fila.java
ExemploFila.java
2. Compilar as três classes e executar a última
3. O comportamento de uma fila não é respeitado
•
•
Por quê ?
Agregue Fila e Lista de modo que a respeitar o
comportamento