Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes - - PDF
Download "Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -"
Maria das Graças Bennert Diegues
1 Programação Java - Herança, Classes Abstratas e Interfaces - Marco Fagundes 1
2 Tópicos Herança Ligação Dinâmica Polimorfismo 2
3 Herança Herança é um conceito que mapeia as classes relacionadas entre si de maneira hierárquica rquica Os descendentes de uma classe herdam todas as variáveis veis e métodos m de seus ancestrais bem como podem criar seus próprios prios 3
4 Herança Os descendentes são subclasses e o seu ascendente imediato é chamado de superclasse A classe base(superclasse) B classe derivada(subclasse) herdada de A específico de B 4
5 Herança Atributos e Métodos Conta numero: String saldo: double sacar, depositar, gets e sets ContaPoupanca No esquema a classe ContaPoupanca possui os atributos (numero e saldo) e os métodos sacar, depositar, gets e sets, devido ao mecanismo de herança 5
6 Implementando a Herança Em java a palavra-chave extends é usada como mecanismo para definição de herança e subtipos Java oferece suporte somente a herança simples de classes Por exemplo: public class ContaPoupanca extends Conta {... 6
7 Lab1 - Implementando Herança 1. Defina a Classe Conta com os atributos encapsulados número n e saldo. 2. Implemente os métodos m de depósito e saque, assim como os métodos m de acesso e mutação. 3. Defina a classe ContaPoupanca como uma uma subclasse da classe Conta. 4. Na classe aplicativo crie um objeto do tipo ContaPoupanca inicialize cada atributo usando o método "set". 5. Exiba os dados da conta poupança a criada. 7
8 Herança - Restrições Atributos e métodos privados são herdados, mas não podem ser acessados Construtores não são herdados O construtor padrão somente estará disponível na subclasse, caso esteja presente na superclasse 8
9 A Keyword super Quando um método da subclasse redefinir um método da superclasse, pode-se acessar o método da superclasse através da palavra-chave super seguida de um ponto(.) Somente a palavra super pode ser utilizada para ativar o construtor da superclasse 9
10 super public class Conta { private String numero; private double saldo; public Conta(String pnum){ numero = pnumero; public class TestaConta { public static void main (String [ ] args ) { Conta cc = new Conta( cc001 ); ContaPoupanca cp = new ContaPoupanca( cp001,1); exibir os atributos de cc e cp... class ContaPoupanca extends Conta{ int variacao; public ContaPoupanca (String pnum, int pvar){ super(pnum); variacao = pvar;... 10
11 Herança Adicionando Atributos e Métodos Conta numero: String saldo: double sacar, depositar, gets e sets ContaPoupanca anobase: Int render, get e set No esquema a classe ContaPoupanca além dos atributos (numero e saldo) e dos métodos sacar, depositar, gets e sets, agora possui membros próprios: O atributo anobase Os métodos get e set do atributo ano base, e render 11
12 Sobreposição/Redefinição/ Override Uma subclasse pode redefinir um método m da superclasse utilizando a mesma assinatura, isto é chamado de sobreescrita/redefini /redefinição/ sobreposição ou override de métodom Conta numero: String saldo: double boolean sacar(double v) com CMPF método sobreescrito subclasse (override) ContaPoupanca boolean sacar(double v) sem CMPF 12
13 Sobreposição/Redefinição/ Override Quando a redefinição do método m da superclasse não possuir a mesma assinatura na subclasse, isto não é anulação, mas sim sobrecarga de métodom não é sobreescrita de método e sim uma sobrecarga, pois a subclasse possui agora os métodos: sacar(double) e sacar (float) Conta numero: String saldo: double boolean sacar(double v) ContaPoupanca boolean sacar(float v) 13
14 Sobreposição/Redefinição/ Override Se um método m na subclasse possuir apenas o tipo de retorno diferente de um método m da sua superclasse será gerado um erro (pois existirão dois métodos m com o mesmo nome) ERRO!!! Dois métodos com o mesmo nome. Lembre-se que tipo de retorno não são considerados para overload. Conta numero: String saldo: double boolean sacar(double v) ContaPoupanca String sacar(double v) 14
15 Lab2 - Sobrepondo Métodos Implemente o método m sacar na classe Conta, que deve considerar a CMPF. public String sacar(double pvalor){ Faça a o override do método m sacar na subclasse ContaPoupanca,, não considerando o desconto de CMPF. Teste a implementação na classe aplicativo, chamando o método m sacar da superclasse ContaCorrente e da subclasse ContaPoupanca. 15
16 Classes Abstratas Permite a definição de uma classe que declara a estrutura de uma abstração sem fornecer a implementação de cada método A responsabilidade da implementação dos métodos é das subclasses É utilizado o modificador abstract para declarar a classe e métodos abstratos Uma classe abstrata tem tudo que uma classe concreta tem mais métodos abstratos Herança Simples (extends) 16
17 Classes Abstratas Classes abstratas não podem ser instanciadas diretamente com o operador new Toda subclasse de uma classe abstract deve implementar todos os métodos abstract na superclasse public abstract class classeabstrata{ abstract void imprimir(); 17
18 Classes Abstratas classe abstrata Conta numero: String saldo: double boolean sacar( ) ContaCorrente ContaPoupanca boolean sacar( ) boolean sacar( ) classes concretas que implementam o método sacar() 18
19 Classes Abstratas public abstract class Conta { String numero; double saldo; public abstract String sacar(double pvalor); //pode ter métodos concretos //métodos gets e sets public class ContaCorrente extends Conta { public String sacar (double pvalor ){ //implementação do método sacar() c/ CPMF public class ContaPoupanca extends Conta { public String sacar (double pvalor ){ //implementação do método sacar() s/ CPMF 19
20 Lab 01 Defina uma classe abstrata Conta possuindo os atributos (numero e saldo) e um método abstrato sacar. Implemente a herança entre as classes Conta (superclasse), ContaCorrente e ContaPoupanca (subclasses). Na classe aplicativo faça o seguinte: Defina uma referência do tipo Conta e crie um objeto do tipo ContaCorrente. Defina uma referência do tipo Conta e crie um objeto do tipo ContaPoupanca. Experimente criar um objeto Conta. 20
21 Interfaces Uma interface é uma especificação explícita de um conjunto de métodos, que são implementados por uma classe Uma determinada classe pode implementar um número ilimitado de interfaces (herança múltipla) Nas interfaces, os métodos são declarados sem nenhum corpo Interface1 Interface2 Interface3 Realiza ou Implementa Classe 21
22 Realizando uma interface class BancoNacional implements ibanco { corpo-da-classe ibanco String auditar() implements BancoNacional BancoInternacional 22
23 Realizando uma Interface public interface ibanco { public String auditar ( ); public class BancoNacional implements ibanco { public String auditar ( ) { return auditando Banco Nacional... ; public class BancoInternacional implements ibanco { public String auditar ( ) { return auditando Banco Internacional... ; 23
24 Realizando uma Interface public class TestaBanco { public static void main (String [ ] args ){ ibanco b = new BancoNacional( ); System.out.println (b.auditar( )); b = new BancoInternacional( ); System.out.println (b.auditar( )); OBS: Toda classe que realiza uma interface deve implementar todos os métodos especificados na interface 24
25 Lab 02 Defina uma interface ibanco possuindo a assinatura do método auditar Construa duas classes BancoNacional e BancoInternacional e estabeleça a herança entre essas classes e a interface ibanco. Na classe BancoNacional, o método auditar deve retornar a string auditando banco nacional.... Na classe BancoInternacional o método auditar deve retornar a string auditando banco internacional.... Na classe aplicativo ilustre a utilização dos tipos criados Defina uma referência do tipo ibanco Crie um objeto do tipo BancoNacional e exiba o retorno do método auditar Em seguida, crie um objeto do tipo BancoInternacional e exiba o retorno do método auditar 25
26 Classes Abstratas e Interface Duas formas para definir subtipos: extends : classe -> classe (herança simples) interface -> interface (herança múltipla) implements : classe -> interface (herança múltipla) 26
27 Pontos Principais - Herança Herança permite o reuso de dados (atributos) e operações (métodos) Para acessar membros da superclasse a partir da subclasse deve-se usar a palavra super Construtores não são herdados e a única forma de acesso a partir de uma subclasse é através da palavra super A subclasse pode adicionar novos atributos e/ou métodos ou sobrepor (redefinir) métodos definidos em sua superclasse Na redefinição de métodos a subclasse deve preservar a assinatura: tipo de retorno, nome do método, m quantidade e tipos dos argumentos 27
28 Pontos Principais Para justificar uma classe ser abstrata pelos menos um método m deve ser declarado como abstrato Interfaces possuem apenas assinaturas de métodos m abstratos Uma classe que estenda ( (extends)) uma classe abstrata ou realize ( (implements)) uma interface deve obrigatoriamente implementar todos os métodos m abstratos da sua superclasse Não é possível criar um objeto do tipo da classe abstrata ou interface Classe abstrata pode ter construtor, mas somente para ser herdado 28
Aula 10 Polimorfismo. Prof. Jefersson Alex dos Santos. Baseado em: http://homepages.dcc.ufmg.br/~fernando/classes/dcc052/ementa/lesson8/
Aula 10 Polimorfismo Prof. Jefersson Alex dos Santos Baseado em: http://homepages.dcc.ufmg.br/~fernando/classes/dcc052/ementa/lesson8/ Polimorfismo Definição: É a capacidade de um objeto em decidir que