poo - 18 - sobrecarga e sobreposição de métodos
Post on 11-Jun-2015
19.644 Views
Preview:
TRANSCRIPT
Sobrecarga e Sobreposição
de Métodos
Programação Orientada a Objetos
Ludimila Monjardim Casagrande 2012
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
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
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
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”);
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.
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”.
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
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;
}
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
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.
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
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.
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
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;
}
}
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;
}
}
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.
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;
}
}
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;
}
}
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( ));
}
}
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
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)
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?
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
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?
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
top related