Anotações OCJP

Minhas anotações para o exame da Oracle (OCJP)

Saiba mais sobre sobrescrita e sobrecarga

Vou falar neste artigo sobre os pontos mais importantes sobre a sobrescrita e sobrecarga.

Definição
Sobrescrita: Utilizada para definir o comportamento de um método de mesmo nome já definido na superclasse.
Sobrecarga: Utiliza o nome do método já definido na classe ou superclasse.
O código abaixo fornece um exemplo que demonstra melhor o que foi explicado acima.

import java.io.IOException;
import java.util.*;

class Sobrecarregado{
List metodo() throws Exception{
List s = new ArrayList();
s.add("metodo classe sobrecarregado");
return s;
}
}
class SobrecargaSobrescrita extends Sobrecarregado{
//sobrescrita
public ArrayList metodo() throws IOException{
ArrayList s = new ArrayList();
s.add("metodo sobrescrito");
return s;
}
//sobrecarga
String metodo(String s){
return "metodo sobrecarregado com argumento String";
}
}

Obrigações da sobrescrita
1. Não modificar a quantidade, ordem e tipo dos argumentos.
2. Ter o tipo de retorno igual ou compatível respeitando a herança (retorno covariante). Como no exemplo acima, a classe SobrecargaSobrescrita define o retorno como ArrayList. E isso funciona pois o retorno do método da superclasse é de uma classe List que é superclasse de ArrayList (note que o inverso não funciona neste caso).
3. A regra de exceção em um método que realiza a sobrescrita também funciona como explicado no item 2 (método que sobrescreve pode lançar IOException e a superclasse pode lançar Exception).
4. A visibilidade do método que sobrescreve não pode ser mais restritiva do que o método sobrescrito (o método que sobrescreve nesse exemplo é public, logo não há problemas pois o método sobrescrito tem visibilidade default).

Obrigação da sobrecarga
1. Deve mudar a quantidade ou tipo dos argumentos definidos no método que fará a sobrecarga (no exemplo o método aceita um argumento String, diferente do método definido anteriormente, que não possui argumentos.

Observe agora o comportamento de execução das classes. Faça o exercício do compilador e tente definir quais são as respostas apresentadas na tela.

public class ExecutaSobre{
public static void main(String args[]) throws Exception{
//1
System.out.println(new SobrecargaSobrescrita().metodo().get(0));
//2
System.out.println(new SobrecargaSobrescrita().metodo("sobrecarregado"));
//3
System.out.println(new Sobrecarregado().metodo().get(0));
Sobrecarregado s = new SobrecargaSobrescrita();
//4
System.out.println(s.metodo().get(0));
//5
SobrecargaSobrescrita s2 = (SobrecargaSobrescrita) new Sobrecarregado();
System.out.println(s2.metodo().get(0));
}
}

Bem, então vamos as respostas abaixo:
1. “método sobrescrito”: Ao realizarmos a instância de um novo objeto da classe SobrecargaSobrescrita, o método a ser chamado é o da própria classe.

2. “metodo sobrecarregado com argumento String”: Este outro objeto chama o método sobrecarregado por String, trazendo esta resposta.

3. “metodo classe sobrecarregado”: Ao realizarmos a instância de  um novo objeto da classe Sobrecarregado, o método a ser chamado é o da própria classe.

4. “metodo sobrescrito”:  É feita a instância de um novo objeto da classe SobrecargaSobrescrita então, mesmo que a referência aponte para a superclasse, o método a ser chamado é o método da instância.

5. “java.lang.ClassCastException”: Embora esteja forçando o cast para a classe SobrecargaSobrescrita, não se trata de um objeto da classe SobrecargaSobrescrita e sim de um objeto da classe acima na hierarquia (Sobrecarregado). Entretanto, como se indica forçadamente ao compilador que se trata de um objeto da classe SobrecargaSobrescrita, não é lançado um erro na compilação e sim lançada uma exceção em tempo de execução.

Então é isso aí, até a próxima e bons estudos!

About these ads

Uma resposta para “Saiba mais sobre sobrescrita e sobrecarga

  1. Pingback: Sobrescrita e Sobrecarga : JornalJava

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: