estou com uma dúvida sobre sobrecarga e sobrescrita.
No livro de Kathy Sierra, ed. em pt-br, na págia 65 cap. 2 sobre O.O existe uma observação sobre tomar cuidado quanto tiver que reconhecer se um método é sobrecarregado em vez de sobrescrito.
Essa é o ex.
No livro, diz que o método doStuff não foi sobrescrito. Ele o sobrepôs, alternando a lista de argumentos, dizendo que a exceção IOException é adequada.
Não entendo a conclusão do livro,tá certo? ou foi algum erro de tradução :?:
como vc pode ver o metodo doStuff esta sendo socrecarregado e nao socrescrito,
pois a lista de argumentos e diferente:
1. public class Foo{
2. public void doStuff[b](int y, String s)[/b]{}
3. public void moreThings(int x){}
4. }
5.
6. class Bar extends Foo{
7. public void doStuff[b](int y, float s)[/b]throws IOException {}
8. }
De uma procurada no google por socrescrita e sobrecarga para entender melhor.
Falou.
rafaelsantos1983
SlashJava,
Existe sobrecarga e socrescrita de metodo.
Existe os dois?
como vc pode ver o metodo doStuff esta sendo socrecarregado e nao socrescrito,
pois a lista de argumentos e diferente:
Tinha percebido que só era sobrecarga, porque a lista de parâmetro muda e tem herannça, mas o texto explicativo do livro me deeixou confuso.
Bar terá os seguintes métodos:
public void doStuff(int y, String s) [herdado]
public void moreThings(int x) [herdado]
public void doStuff(int y, float s) throws IOException
Observe que o doStuff definido em Bar não tem os mesmos parâmetros do doStuff herdado de Foo. Logo não há sobrescrita. Como os dois métodos tem o mesmo nome e a classe Bar tem os dois, há sobrecarga.
Djonatah
Observe tbm (apenas complementando o que o Victor falou), que um metodo que eh sobrescrito nao pode lancar novas checked exceptions…logo SE ele realmente tivesse sido sobrescrito, o codigo nao compilaria.
Abracos
<><
rafaelsantos1983
Obrigado victorwss e Djonatah.
Tudo esclarecido.
rafaelsantos1983
Aproveitando esse assunto.
O que é retorno covariantes?
Vi que na versão 1.5 é possível alterar o tipo do retorno de um método sobrescrito. Mas só é possível fazê-lo dentro dos limites covariantes.
Sei que é possível, alterar o retorno para um sub-tipo do tipo do método “original”.
Mas vi um exemplo no livro de Kathy Sierra e não entendi.
Segue ele: