poo - 18 - sobrecarga e sobreposição de métodos
TRANSCRIPT
![Page 1: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/1.jpg)
Sobrecarga e Sobreposição
de Métodos
Programação Orientada a Objetos
Ludimila Monjardim Casagrande 2012
![Page 2: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/2.jpg)
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
![Page 3: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/3.jpg)
Exemplo de Sobrecarga de Construtor
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 3
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 valor
![Page 4: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/4.jpg)
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
![Page 5: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/5.jpg)
Exemplo de Sobrecarga de Método
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 5
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”);
![Page 6: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/6.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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.
![Page 7: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/7.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 7
Exemplo
public class Data {
private int dia;
private int mes;
private int ano;
public Data(int dia, int mes, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
public Data(int mes, int dia, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
}
Como todos os argumentos são do
mesmo tipo, somente a inversão do
nome das variáveis não é suficiente
para que esses dois construtores
sejam considerados diferentes.
Esse código, portanto, geraria um
erro de compilação “método
duplicado na classe Data”.
![Page 8: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/8.jpg)
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
![Page 9: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/9.jpg)
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:
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 9
public String getData( ) {
return toString( );
}
public Date getData( ) {
Date d = new Date( );
d.setDate(dia);
d.setMonth(mes);
d.setYear(ano);
return d;
}
![Page 10: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/10.jpg)
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
![Page 11: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/11.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 11
Exemplo
public class Data{
private int dia;
private String mes;
private long ano;
public Data(int dia, String mes, long ano){
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
public Data(String mes, int dia, long ano){
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
public String toString(){
return dia + " de " + mes + " de " + ano;
}
public static void main(String[] args){
Data d1 = new Data(1, “maio", 2004);
Data d2 = new Data(“maio", 1, 2004);
System.out.println(d1);
System.out.println(d2);
}
}
Exemplo de sobrecarga válida.
![Page 12: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/12.jpg)
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
![Page 13: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/13.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 13
Conversões Implícitas Válidas
As conversões implícitas válidas entre os tipos
primitivos do Java são:
byte short
char
long int float double
Os elementos á direita da seta recebem os elementos à esquerda.
![Page 14: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/14.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 14
Outras Conversões Implícitas Válidas
Conversões implícitas válidas entre classes,
subclasses, interfaces e sub-interfaces
TipoRecebido é uma
classe
TipoRecebido é uma
interface
TipoReceptor é uma
classe
TipoRecebido deve ser
uma subclasse de
TipoReceptor
TipoReceptor deve ser
Object
TipoReceptor é uma
interface
TipoRecebido deve
implementar a
interface TipoReceptor
TipoRecebido deve ser
uma sub-interface de
TipoReceptor
![Page 15: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/15.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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;
}
}
![Page 16: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/16.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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;
}
}
![Page 17: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/17.jpg)
Sobreposição de Métodos
A sobreposição de métodos (ou overriding)
ocorre quando há polimorfismo:
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 17
Figura
Quadrado
Círculo
calcularArea()
calcularArea() calcularArea()
A implementação do método
calcularArea() das subclasses
sobrepõe a implementação
do mesmo método na
superclasse.
![Page 18: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/18.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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;
}
}
![Page 19: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/19.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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;
}
}
![Page 20: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/20.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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( ));
}
}
![Page 21: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/21.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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 sucessivamente
![Page 22: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/22.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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)
![Page 23: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/23.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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?
![Page 24: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/24.jpg)
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
![Page 25: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/25.jpg)
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 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?
![Page 26: POO - 18 - Sobrecarga e Sobreposição de Métodos](https://reader031.vdocuments.site/reader031/viewer/2022012320/5579a6b9d8b42ac1148b4b56/html5/thumbnails/26.jpg)
Bibliografia Sugerida
Java: Como programar
Autores: H. M. Deitel e P. J. Deitel
Editora: Pearson – 6ª Edição
Complete Java 2 Certification
Study Guide
Sybex
Sobrecarga e Sobreposição ©2012 Ludimila Monjardim Casagrande 26