POO - 18 - Sobrecarga e Sobreposição de Métodos

24,293 views
23,913 views

Published on

Published in: Technology
2 Comments
14 Likes
Statistics
Notes
No Downloads
Views
Total views
24,293
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
417
Comments
2
Likes
14
Embeds 0
No embeds

No notes for slide

POO - 18 - Sobrecarga e Sobreposição de Métodos

  1. 1. Programação Orientada a Objetos Sobrecarga e Sobreposição de Métodos Ludimila Monjardim Casagrande 2012
  2. 2. Sobrecarga de Métodos  A sobrecarga de métodos, também conhecida como overloading, ocorre quando criamos dois ou mais métodos com o mesmo nome mas com uma lista de argumentos diferente.  A sobrecarga está sendo aplicada, por exemplo, quando são declarados dois construtores para uma mesma classe, sendo um sem parâmetros e outro com parâmetros.Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 2
  3. 3. Exemplo de Sobrecarga de Construtor public class Conta { private double saldo; public Conta () { } public Conta (double saldo) { this.saldo = saldo; } } Podemos, então, criar objetos dessa classe de dois modos: Conta c = new Conta(); ou Conta c = new Conta(100);  inicializando o saldo com algum valorSobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 3
  4. 4. Sobrecarga de Métodos  A sobrecarga também é aplicada para os outros métodos que não sejam construtores.  Em algumas situações, é útil poder executar um método em uma classe passando mais ou menos argumentos, conforme a necessidade.  Também pode ser necessário fazer a sobrecarga de um mesmo método, com o mesmo número de argumentos, porém variando os tipos desses argumentos.Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 4
  5. 5. Exemplo de Sobrecarga de Método public class Conta { private double saldo; public String toString() { return " saldo = " + this.saldo; } public String toString(String prefixo) { return prefixo + ": " + toString(); } } Exemplo de uso: Conta c = new Conta(100); c.toString(); ou c.toString(“Conta número X”);Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 5
  6. 6. Sobrecarga de Métodos  Para que seja permitida a sobrecarga, os nomes dos métodos devem ser iguais mas as assinaturas devem ser diferentes.  Duas assinaturas idênticas não são permitidas.  A assinatura de um método é composta por seu nome e pelo número e tipos de argumentos que são passados para esse método, independentemente dos nomes das variáveis usadas na declaração do método.Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 6
  7. 7. Exemplo public class Data { private int dia; private int mes; private int ano; public Data(int dia, int mes, int ano) { Como todos os argumentos são do this.dia = dia; mesmo tipo, somente a inversão do nome das variáveis não é suficiente this.mes = mes; para que esses dois construtores this.ano = ano; sejam considerados diferentes. } public Data(int mes, int dia, int ano) { this.dia = dia; Esse código, portanto, geraria um this.mes = mes; erro de compilação “método duplicado na classe Data”. this.ano = ano; } }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 7
  8. 8. Sobrecarga de Métodos  O tipo de retorno do método não é considerado parte da assinatura.  Sendo assim, não podemos ter dois métodos com o mesmo nome e com o mesmo número e tipos de argumentos, mas apenas com o tipo de retorno diferente.Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 8
  9. 9. Exemplo  Na classe Data declarada anteriormente não seria possível a declaração dos dois métodos abaixo, pois suas assinaturas são idênticas, eles só diferem quanto ao tipo de retorno, que não é considerado parte da assinatura do método: public String getData( ) { public Date getData( ) { return toString( ); Date d = new Date( ); } d.setDate(dia); d.setMonth(mes); d.setYear(ano); return d; }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 9
  10. 10. Sobrecarga de Métodos  A decisão sobre qual método será chamado quando existirem dois ou mais métodos com o mesmo nome será feita pelo compilador, que verificará se os tipos passados como argumentos casam com alguma das assinaturas daquele método.  Supondo que os argumentos sejam de tipos diferentes, a ordem em que aparecem também é relevante, isto é:  public Data(int dia, String mes, long ano)   public Data(String mes, int dia, long ano)Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 10
  11. 11. Exemplopublic class Data{ public static void main(String[] args){ private int dia; Data d1 = new Data(1, “maio", 2004); private String mes; private long ano; Data d2 = new Data(“maio", 1, 2004); public Data(int dia, String mes, long ano){ System.out.println(d1); this.dia = dia; System.out.println(d2); this.mes = mes; this.ano = ano; } } } public Data(String mes, int dia, long ano){ this.dia = dia; this.mes = mes; Exemplo de sobrecarga válida. this.ano = ano; } public String toString(){ return dia + " de " + mes + " de " + ano; }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 11
  12. 12. Sobrecarga de Métodos  Ao verificar se há casamento entre os argumentos passados e as assinaturas dos métodos, o compilador considera todas as possibilidades de conversões implícitas.  Sendo assim, se o valor do argumento passado for, por exemplo, do tipo char e o argumento declarado na assinatura do método é do tipo int, então, esse valor passado será aceito, pois é possível fazer uma conversão implícita de char para int.Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 12
  13. 13. Conversões Implícitas Válidas  As conversões implícitas válidas entre os tipos primitivos do Java são: char int long float double byte short Os elementos á direita da seta recebem os elementos à esquerda.Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 13
  14. 14. Outras Conversões Implícitas Válidas  Conversões implícitas válidas entre classes, subclasses, interfaces e sub-interfaces TipoRecebido é uma TipoRecebido é uma classe interface TipoRecebido deve ser TipoReceptor é uma TipoReceptor deve ser uma subclasse de classe Object TipoReceptor TipoRecebido deve TipoRecebido deve ser TipoReceptor é uma implementar a uma sub-interface de interface interface TipoReceptor TipoReceptorSobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 14
  15. 15. Tipos para o Exemplo public interface Figura { public double calcularArea( ) ; } public class Quadrado extends Object implements Figura { double lado; public Quadrado(double lado) { this.lado = lado; } public double calcularArea( ) { double area = 0; area = lado * lado; return area; } }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 15
  16. 16. Exemplo de Conversões Implícitas public class Principal { public static void main(String[ ] args) { /* A variável o do tipo Object recebe qualquer objeto * que seja de um tipo que estenda Object */ Object o = new Quadrado(4); /* A variável f do tipo Figura (que é uma interface) * recebe qualquer objeto que seja de um tipo que * implemente Figura */ Figura f = new Quadrado(2); /* Uma variável do tipo Object recebe qualquer * variável cujo tipo seja uma interface */ Object o1 = f; } }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 16
  17. 17. Sobreposição de Métodos  A sobreposição de métodos (ou overriding) ocorre quando há polimorfismo: Figura A implementação do método calcularArea() das subclasses sobrepõe a implementação calcularArea() do mesmo método na superclasse. Quadrado Círculo calcularArea() calcularArea()Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 17
  18. 18. Exemplo de Polimorfismo public class Figura { public double calcularArea( ) { return 0; } } public class Quadrado extends Figura { double lado; public Quadrado(double lado) { this.lado = lado; } public double calcularArea( ) { double area = 0; area = lado * lado; return area; } }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 18
  19. 19. Exemplo de Polimorfismo public class Circulo extends Figura { double raio; public Circulo (double raio) { this.raio = raio; } public double calcularArea( ) { double area = 0; area = 3.14 * raio * raio; return area; } }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 19
  20. 20. Exemplo de Polimorfismo public class Main { public static void main(String[] args) { Figura f1 = new Quadrado(4); Figura f2 = new Circulo(2); System.out.println("Área da Figura 1 é: " + f1.calcularArea( ) + "n“ + "Área da Figura 2 é: " + f2.calcularArea( )); } }Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 20
  21. 21. Sobreposição de Métodos  Existem algumas regras que devem ser respeitadas para que a sobreposição seja válida.  Por exemplo, o método que sobrepõe não deve restringir o grau de acessibilidade do método sobreposto. private default protected public um método private pode ser sobreposto por um default e assim sucessivamenteSobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 21
  22. 22. Sobreposição de Métodos  Para que haja sobreposição, as assinaturas dos métodos devem ser idênticas.  Como o valor de retorno não é considerado parte da assinatura, ele pode variar desde que sejam respeitadas as regras de conversão entre tipos.  Exemplo: O método (1) pode sobrescrever o método (2), mas o contrário não é verdade:  public ArrayList teste(ArrayList l) (1)  public List teste(ArrayList l) (2)Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 22
  23. 23. Exercícios de Revisão 1. Para que serve uma interface? 2. O que é uma classe abstrata? 3. O que é um método abstrato? 4. Qual é a diferença entre classes abstratas e interfaces? 5. O que é polimorfismo? 6. Todos os métodos de uma classe abstrata podem ser não abstratos?Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 23
  24. 24. Exercícios de Revisão 7. O que significa implementar uma interface? Em outras palavras, o que é necessário fazer quando uma classe concreta implementa uma interface? 8. Quando uma classe concreta estende uma classe abstrata que não contém nenhum método abstrato, ela é obrigada a implementar algum método? Justifique. 9. É possível instanciar uma interface? E uma classe abstrata?Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 24
  25. 25. Exercícios de Revisão 10. Quando uma subclasse implementa um método herdado da superclasse, o que está acontecendo: overloading ou overriding? 11. É correto afirmar que uma classe pode estender uma interface? 12. Um interface pode estender outra interface? Isto é, há herança entre interfaces? 13. Há herança múltipla em Java?Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 25
  26. 26. Bibliografia Sugerida  Java: Como programar Autores: H. M. Deitel e P. J. Deitel Editora: Pearson – 6ª Edição  Complete Java 2 Certification Study Guide SybexSobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 26

×