Regras de implementação de um método (livro da Kathy)?

8 respostas
P

Galera,
Estou c/ uma dúvida referente o livro da Kathy, segue:

No capítulo 2 está dizendo que para implementação de um método de uma interface qualquer, é necessário que sigamos as regras de sobrecarga, que resumindo, dizem:

-Métodos sobrecarregados devem alterar os parâmetros;

-Métodos sobrecarregados devem alterar o tipo de retorno;

-Métodos sobracarregados podem alterar o modificador de acesso(colocar qualquer um), etc.

Tenho a seguinte Interface e Classe:

interface Boo { void o(); }

class Foo implements Boo{ [b]protected[/b] void o(){ // ñ compila tem o [i]protected[/i] System.out.println("o"); } }

E se ñ coloco nenho modificador de acesso também ñ compila, só compila c/ o public.
E as regras de sobrecarga??
Alguém pode me ajudar??

8 Respostas

Deh

Qualquer um não =p
você não pode reduzir a visibilidade de um método…

e você está implementando a interface, cujos métodos são implicitamente “public abstract”…

você não pode reduzir a visibilidade de um “public” para um protected!

peerless

Só pra lembrar:

[list]Implícito

do Lat. implicitu

adj.,
    que está envolvido ou contido, mas não expresso claramente;
    não expresso em palavras, subentendido;
    tácito.[/list]</blockquote>
P

Deh,

Só que essa regra de ñ diminuir a visibilidade q. vc está falando ñ é de Sobrecarga e sim de Subscrição!!!

To começando a achar que isso fui uma errata do livro!?!?

peerless

Bom, se está assim mesmo no livro da khaty, é uma errata.

:shock:

Deh

Mas o que você está fazendo com aquela interface e o seu método
é Subscrição e não Sobrecarga!

Seria sobrecarga, se você mudasse os argumentos(e não necessariamente os modificares ou o tipo de retorno)…

ao invés de um “protected void o() { }” fazer um

“protected void o(String s){ }” na sua subclasse!

P

Sim,

Mas, então o livro da Kathy está errado mesmo…

Esse erro e muito perigoso ñ é!!!

LPJava

isso ia funcionar se fosse uma class abstract com um metodo default… porem nao funciona para interface devido os metodos de uma interface ser implicitamente public entao vc nao pode converter de public para protected na subscrição. por isso nao compila… o que vc tem q ter em mente sobre interface:

  • mesmo que eu nao declare nenhum modificador os metodos sao public
  • quando declarar uma variavel mesmo que nao coloque final, static e public implicitamente isso ja acontece.
    exemplo:
interface Z{
void z();//implicitamente public
public void y();
int k=5;//implicitamente public static final
}
class Compila{
public void z(){}
public void y(){}
}
class NaoCompila{
void z(){} //tentando converter de public para default
public void y(); //invalido nao implementei o metodo
Z.k=4;//tentei alterar uma variavel final
}

espero ter ajudado! qualquer duvida so postar ae :smiley:

P

Só para confirmar,

Para implementação de métodos de uma interface qualquer devemos obedecer as regras de Subscrição e não de Sobracarga!!

Criado 17 de maio de 2007
Ultima resposta 17 de mai. de 2007
Respostas 8
Participantes 4