capítulo 9 herança. 2capítulo 9 – herança herança classe derivada membros protected...

30
Capítulo 9 Herança

Upload: internet

Post on 17-Apr-2015

117 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

Capítulo 9

Herança

Page 2: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

2Capítulo 9 – Herança

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()

Page 3: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

3Capítulo 9 – Herança

HerançaConta

numeronomesaldo

getNumero()setNumero()getNome()setNome()getSaldo()depositar()retirar()

ContaCorrente

debitarTarifa()

ContaPoupanca

capitalizar()bloquearSaldo()

Page 4: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

4Capítulo 9 – Herança

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);

}}

Page 5: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

5Capítulo 9 – Herança

HerançaNa 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)

Page 6: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

6Capítulo 9 – Herança

Membros protectedNa 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

Page 7: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

7Capítulo 9 – Herança

Membros protectedNa 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 ContaPoupancaInvisível em outras classes

Page 8: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

8Capítulo 9 – Herança

Exercício• A partir da classe Funcionario 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 chamadaExibeDados contendo o método mainque deverá instanciar a classe Motorista,preencher todos os seus atributos eexibí-los conforme o próximo slide.

Funcionario

getNome()setNome(String)getSobrenome()setSobrenome(String)getCargo()setCargo(String)getSalario()setSalario(double)

Page 9: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

9Capítulo 9 – Herança

Exercício (cont.)

• A classe ExibeDados deverá exibir:

Nome : ManuelSobrenome: AntunesSalario : 2000.0Cargo : ManobristaCNH : 6578985Placa : ABC-1234

Page 10: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

10Capítulo 9 – Herança

Sobrescrição (overwriting)

Conta

...

...

...

...retirar()

ContaCorrente

...retirar()

ContaPoupanca

...

...

Page 11: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

11Capítulo 9 – Herança

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.

Page 12: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

12Capítulo 9 – Herança

Sobrescrição

public class ContaCorrente extends Conta {

....

....

/** Retirada agora cobra CPMF */public void retirar(double valor) {

saldo -= valor;saldo -= 0.0025 * valor;

}}

Page 13: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

13Capítulo 9 – Herança

SobrescriçãoNa 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.

Page 14: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

14Capítulo 9 – Herança

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 -= 0.0025 * valor;

}}

Executa o método retirar()da mesma forma que foi

implementado na classe Conta

Page 15: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

15Capítulo 9 – Herança

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.

Conta

Conta(int,String,double)ContaCorrente

ContaCorrente(int,String,double) ContaConjunta

ContaConjunta(int,String,double)

new ContaConjunta(3005, “Joaquim”, 215.5);

12

3

Page 16: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

16Capítulo 9 – Herança

Herança de construtores

• Se uma classe base possuir métodos construtores, a classe derivada também deverá possuir construtores que deverão, através da cláusula super, chamar um dos construtores da classe base.

• Esta cláusula super deverá ser a primeira instrução presente no método construtor da classe derivada.

Page 17: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

17Capítulo 9 – Herança

Herança de construtores

public class ContaCorrente extends Conta {. . . . . .public ContaCorrente(int num, String nome, double valor) {

super(num, nome, valor);. . . . . .

}

. . . . . .

. . . . . .

. . . . . .}

Inicializa a classe base através de seu construtor

Realiza outras instruções de inicialização inerentes à classe ContaCorrente

Page 18: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

18Capítulo 9 – Herança

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.

Page 19: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

19Capítulo 9 – Herança

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.

Page 20: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

20Capítulo 9 – Herança

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;

}}

Page 21: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

21Capítulo 9 – Herança

Classe Abstrata

Na aplicação principal:

Conta c1 = new Conta(); // Não funciona

Page 22: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

22Capítulo 9 – Herança

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 * 1.0025;else System.out.println("Saldo insuficiente");

}

}

Classe Abstrata

Page 23: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

23Capítulo 9 – Herança

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());

Page 24: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

24Capítulo 9 – Herança

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.

Page 25: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

25Capítulo 9 – Herança

A classe Object

public class Conta. . . . . .. . . . . .

}

extends Object {

Page 26: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

26Capítulo 9 – Herança

A classe Object

• clone()• equals(Object)• finalize()• getClass()• hashCode()• notify()

• notifyAll()• toString()• wait()• wait(long)• wait(long, int)

Page 27: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

27Capítulo 9 – Herança

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.

Page 28: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

28Capítulo 9 – Herança

O método toString()

public class Conta {private long numero;private double saldo;private String nome;. . . . . .. . . . . .public String toString() {

return numero + “-” + nome;}

}

Page 29: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

29Capítulo 9 – Herança

O método toString()

Na aplicação principal:

Conta c = new Conta(1005, “João Silva”, 1500);. . . . .;. . . . .;System.out.println(c);

Será exibido:

1005 – João Silva

Page 30: Capítulo 9 Herança. 2Capítulo 9 – Herança Herança Classe derivada Membros protected Sobrescrição Cláusula super Herança de construtores Métodos final

30Capítulo 9 – Herança

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);