Programação Orientada a Objetos Sobrecarga e Sobreposição de Métodos Ludimila Monjardim Casagrande...
Sobrecarga de Métodos  A sobrecarga de métodos, também conhecida como overloading, ocorre quando criamos dois ...
Exemplo de Sobrecarga de Construtor public class Conta { private double saldo; public Conta () { } ...
Sobrecarga de Métodos  A sobrecarga também é aplicada para os outros métodos que não sejam construtores.  ...
Exemplo de Sobrecarga de Método public class Conta { private double saldo; public String toString() { ret...
Sobrecarga de Métodos  Para que seja permitida a sobrecarga, os nomes dos métodos devem ser iguais mas as ...
Exemplo public class Data { private int dia; private int mes; private int ano; public Data(int dia, int me...
Sobrecarga de Métodos  O tipo de retorno do método não é considerado parte da assinatura.  Sendo assim, nã...
Exemplo  Na classe Data declarada anteriormente não seria possível a declaração dos dois métodos abaixo, pois ...
Sobrecarga de Métodos  A decisão sobre qual método será chamado quando existirem dois ou mais métodos com o me...
Exemplopublic class Data{ public static void main(String[] args){ private int dia; ...
Sobrecarga de Métodos  Ao verificar se há casamento entre os argumentos passados e as assinaturas dos ...
Conversões Implícitas Válidas  As conversões implícitas válidas entre os tipos primitivos do Java são: ...
Outras Conversões Implícitas Válidas  Conversões implícitas válidas entre classes, subclasses, interfaces e su...
Tipos para o Exemplo public interface Figura { public double calcularArea( ) ; } public class Quadrado extend...
Exemplo de Conversões Implícitas public class Principal { public static void main(String[ ] args) { /* A v...
Sobreposição de Métodos  A sobreposição de métodos (ou overriding) ocorre quando há polimorfismo: ...
Exemplo de Polimorfismo public class Figura { public double calcularArea( ) { return 0; } } public clas...
Exemplo de Polimorfismo public class Circulo extends Figura { double raio; public Circulo (double raio) {...
Exemplo de Polimorfismo public class Main { public static void main(String[] args) { Figura f1 = new Quadrad...
Sobreposição de Métodos  Existem algumas regras que devem ser respeitadas para que a sobreposição seja válid...
Sobreposição de Métodos  Para que haja sobreposição, as assinaturas dos métodos devem ser idênticas.  Como...
Exercícios de Revisão 1. Para que serve uma interface? 2. O que é uma classe abstrata? 3. O que é um método abstr...
Exercícios de Revisão 7. O que significa implementar uma interface? Em outras palavras, o que é necessário fa...
Exercícios de Revisão 10. Quando uma subclasse implementa um método herdado da superclasse, o que está ...
Bibliografia Sugerida  Java: Como programar Autores: H. M. Deitel e P. J. Deitel Editora: Pearson – 6ª...
of 26

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

Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


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

  • 1. Programação Orientada a Objetos Sobrecarga e Sobreposição de Métodos Ludimila Monjardim Casagrande 2012
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

Related Documents