Dúvida sobre

6 respostas
rafaelsantos1983

Pessoal,

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.

public class Foo{
       public void doStuff(int y, String s){}
       public void moreThings(int x){}
    }

    class Bar extends Foo{
       public void doStuff(int y, float s)throws IOException {}
    }

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 :?:

6 Respostas

S

O livro esta correto.

Existe sobrecarga e socrescrita de metodo.

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.

Obrigado pela ajuda. :slight_smile:

victorwss

Só há sobrecarga. Não há sobrescrita de nada.

Foo terá os seguintes métodos:

public void doStuff(int y, String s)

public void moreThings(int x)

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.
:smiley:

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:

public class Foo{
    void go() {}
}

public class Bar extends Foo{
    String go(){
         return null; //sobrescrição de acordo com o livro válida para a versão 5.
    }    
}
Criado 19 de janeiro de 2009
Ultima resposta 20 de jan. de 2009
Respostas 6
Participantes 4