A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Capítulo 9 Herança 1.

Apresentações semelhantes


Apresentação em tema: "Capítulo 9 Herança 1."— Transcrição da apresentação:

1 Capítulo 9 Herança 1

2 Herança Herança Classe derivada Membros protected Sobrescrição
Cláusula super Herança de construtores Métodos final Classes final Classes abstratas A classe Object O método toString() 2

3 Herança Conta numero nome saldo
getNumero() setNumero() getNome() setNome() getSaldo() depositar() retirar() ContaPoupanca capitalizar() bloquearSaldo() ContaCorrente debitarTarifa()

4 Herança - Classe derivada
public class ContaPoupanca extends Conta { /** * Adiciona a rentabilidade da poupança. * Deve ser executado uma vez por mês. */ public void capitalizar(double taxaJuros) { double rentabilidade = getSaldo() * taxaJuros; depositar(rentabilidade); } 4

5 (declarado em ContaPoupanca)
Herança Na aplicação principal: ContaPoupanca c2 = new ContaPoupanca(); c2.setNumero(8505); c2.setNome("Maria"); c2.depositar(1000.0); c2.retirar(200.0); c2.capitalizar(0.018); System.out.print("Saldo atual: "); System.out.print(c2.getSaldo()); Membros herdados (declarados em Conta) Membro próprio (declarado em ContaPoupanca)

6 Membros protected Na classe base (mãe): public class Conta { private int numero; private String nome; private double saldo; } Na classe derivada (filha): public class ContaPoupanca extends Conta { public void capitalizar(double taxaJuros) { saldo += (saldo * taxaJuros); } Atributo saldo inacessível Declarado na classe Conta como private. Visível apenas na classe Conta

7 Membros protected Na classe base (mãe): public class Conta { private int numero; private String nome; protected double saldo; } Na classe derivada (filha): public class ContaPoupanca extends Conta { public void capitalizar(double taxaJuros) { saldo += (saldo * taxaJuros); } Atributo saldo (protected) Declarado na classe Conta Visível na classe ContaPoupanca Invisível em outras classes

8 Exercício A partir da classe Funcionario fornecida pelo instrutor e especificada no diagrama abaixo, crie uma classe derivada (filha) denominada Motorista acrescentando os atributos: placaAutomovel : String cnh : String e seus devidos métodos get’s e set’s. Crie uma outra classe chamada ExibeDados contendo o método main que deverá instanciar a classe Motorista, preencher todos os seus atributos e exibí-los conforme o próximo slide. Funcionario getMatricula() setMatricula(long) getNome() setNome(String) getSalario() setSalario(double)

9 Exercício (cont.) A classe ExibeDados deverá exibir: Matricula: 123
Nome : Manuel da silva Salario : CNH : Placa : ABC-1234

10 Sobrescrição (overwriting)
Conta retirar() ContaPoupanca ContaCorrente ... retirar()

11 Sobrescrição Ocorre quando a classe filha reimplementa um método já existente na classe mãe. Para sobrescrever um método, deve-se criar na classe filha um método com... mesmo nome; mesmos parâmetros de entrada; mesmo tipo de retorno ...daquele existente na classe mãe.

12 Sobrescrição public class ContaCorrente extends Conta { ....
/** Retirada agora cobra CPMF */ public void retirar(double valor) { saldo -= valor; saldo -= * valor; } 12

13 Desta vez ocorre a cobrança de CPMF sobre o valor a ser retirado.
Sobrescrição Na aplicação principal: ContaCorrente c3 = new ContaCorrente(); c3.setNumero(8505); c3.setNome("Maria"); c3.depositar(1000.0); c3.retirar(2000.0); System.out.print("Saldo atual: "); System.out.print(c3.getSaldo()); Desta vez ocorre a cobrança de CPMF sobre o valor a ser retirado.

14 Cláusula super Utilizada para referenciar os atributos e métodos implementados na classe base (classe mãe) public class ContaCorrente extends Conta { .... public void retirar(double valor) { super.retirar(valor); saldo -= * valor; } Executa o método retirar() da mesma forma que foi implementado na classe Conta

15 Herança de construtores
Ao instanciar um objeto, os métodos construtores de seus ancestrais são executados em cascata a fim de construir uma instância consistente da classe solicitada. new ContaConjunta(215.5); Conta Conta(String) Conta(double) Conta(int) ContaCorrente ContaCorrente(String) ContaCorrente(int, double) ContaConjunta ContaConjunta(int) ContaConjunta(double) 1 2 3

16 Herança de construtores
Se uma classe base possuir métodos construtores, a classe derivada deverá possuir um ou mais métodos construtores, e estes deverão, através da cláusula super, escolher qual dos construtores da classe base será chamado. Esta cláusula super deverá ser a primeira instrução presente no método construtor da classe derivada.

17 Herança de construtores
public class ContaCorrente extends Conta { public ContaCorrente(int num, double valor) { super(valor); } public ContaCorrente(String nome) { super(nome); } Inicializa a classe base através do construtor que possui um double Realiza outras instruções de inicialização inerentes à classe ContaCorrente

18 Métodos final A cláusula final é utilizada para bloquear a sobrescrição de métodos pelas classes filhas. public class Conta { public final void depositar(double valor) { } Ao criar uma classe derivada da classe acima, não podemos sobrescrever o método depositar pois foi definido como final.

19 Classes final A cláusula final também pode ser utilizada na declaração de classes. public final class Conta { } Neste caso, estamos declarando uma classe Conta como sendo uma classe que não permite a criação de classes derivadas.

20 Classe Abstrata public abstract class Conta { public int numero; public String nome; double saldo; public abstract void depositar (double v); public abstract void retirar (double v); public double getSaldo () { return saldo; } } 20

21 Classe Abstrata Na aplicação principal:
Conta c1 = new Conta(); // Não funciona 21

22 Classe Abstrata public class ContaCorrente extends Conta { /* Implementação Obrigatória */ public void depositar (double v) { saldo += v; } /* Implementação Obrigatória */ public void retirar (double v) { if (saldo >= v) saldo -= v * ; else System.out.println("Saldo insuficiente"); } } 22

23 Classe Abstrata Na aplicação principal:
ContaCorrente c = new ContaCorrente(); c.depositar(100.0); c.retirar(50.0); System.out.println(“Saldo atual: ” + c.getSaldo()); 23

24 A classe Object O princípio de herança é aplicada a toda e qualquer classe que possamos elaborar no Java. A própria linguagem Java possui centenas de classes utilitárias já prontas para uso, possuindo os mesmo princípios de orientação a objeto mostrados até agora. Uma destas classes é chamada Object. Ela foi criada para servir como base de herança para toda e qualquer outra classe desenvolvida no Java.

25 A classe Object public class Conta . . . . . . . . . . . . }
extends Object {

26 A classe Object clone() equals(Object) finalize() getClass()
hashCode() notify() notifyAll() toString() wait() wait(long) wait(long, int)

27 O método toString() Retorna uma representação literal da entidade representada pela classe. Pode ser sobrescrita por sua classe para retornar algum nome ou frase que represente o objeto instanciado a partir daquela classe.

28 O método toString() public class ClienteVO { private long numero;
private double saldo; private String nome; public String toString() { return numero + “-” + nome; }

29 O método toString() Na aplicação principal: Será exibido:
Conta c = new Conta(1005, “João Silva”, 1500); ; System.out.println(c); Será exibido: 1005 – João Silva

30 System.out.println(mot);
Exercício Altere a classe Motorista criada no último exercício e sobrescreva o método toString() para que este retorne um único String contendo os dados do motorista no formato exigido. Altere a classe ExibeDados modificando a chamada para exibição de dados do motorista utilizando a instrução abaixo: System.out.println(mot); Crie também uma instância da classe Funcionario e exiba seus dados da mesma forma utilizada para a classe Motorista (seu método toString() já foi implementado). 30


Carregar ppt "Capítulo 9 Herança 1."

Apresentações semelhantes


Anúncios Google