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