| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 13:32:48
|
Puppets
Virtual Machine Man
![[Avatar]](/images/avatar/6c7a107981f9c2a0ed55efce297bd1e2.png)
Membro desde: 12/12/2006 14:14:55
Mensagens: 508
Localização: Porto Alegre
Offline
|
Já venho estudando OO há algum tempo e ainda não entedo o porque do uso de interfaces sem nenhum método. Um exemplo é a interface Serializable, essa interface não contém nenhum método, ela é utilizada para serializar objetos, seu esboco é o seguinte:
Tanto em Java quanto em C# existem essas interfaces, posso citar outro exemplo em java, a interface Cloneable, nesta interface minha dúvida ainda
é maior pois eu só posso sobrescrever o método clone da classe Object caso eu implemente essa interface, alguém sabe o porque disso ?
|
Nunca desista antes de conseguir. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 13:35:11
|
**Popeye12345**
GUJ Master
Membro desde: 30/03/2008 20:56:41
Mensagens: 1293
Offline
|
Cara, por várias razões - desde polimorfismo até organização, um dos conceitos de OO é programar para interfaces e não para implementações.
Porque elas existem? Para que cada codigo faça a sua propria implementação. Digamos que você tem uma classe chamada Animais, e os animais tem comportamento de comer, certo? Então o correto é você criar uma interface dando a cada animal diferente a possibilidade de falar o que ele vai comer e do jeito dele.
Isso é um dos conceitos fundamentais de OO.
Outra coisa, essa interface Serializable que não tem nenhum método é uma interface do tipo Marcadora, ela diz que aquela classe vai poder serializar algum objeto.
|
unnamed.
there are so many monkeys at guj. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 13:50:31
|
Puppets
Virtual Machine Man
![[Avatar]](/images/avatar/6c7a107981f9c2a0ed55efce297bd1e2.png)
Membro desde: 12/12/2006 14:14:55
Mensagens: 508
Localização: Porto Alegre
Offline
|
Ok cara, esse conceito de interface marcadora que não entendo, porque eu só consigo dar um override no método clone da classe Object
se eu implementar a interface Cloneable ? como o compilador entede isso ?
|
Nunca desista antes de conseguir. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 14:43:16
|
helionagamachi
HelloWorld
Membro desde: 16/06/2008 12:58:04
Mensagens: 13
Offline
|
Se você implementar a interface cloneable não será apenas esse método que você poderá dar um Override.
Outros métodos, da classe Object (toString(), hash() por exemplo), ou métodos da classe mãe da sua classe também podem ser redefinidos,
contanto que eles não possuam o modificador "final" que indica, que o método não pode ser redefinido.
EDIT:
Agora, para exemplificar , você tem uma classe que implementou a interface cloneable, e tem um código feito por você para o método clone().
se uma instância dessa classe chamar o método clone() , a máquina virtual irá utilizar sua implementação para o método.
Se a classe do objeto que chamou o método clone não tiver uma implementação própria para o método, então , uma implementação será procurada na classe mãe, e assim vai indo até achar uma implementação do mesmo, podendo chegar até na implementação do método clone() da classe Object.
This message was edited 3 times. Last update was at 17/07/2008 14:51:35
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 15:01:06
|
Puppets
Virtual Machine Man
![[Avatar]](/images/avatar/6c7a107981f9c2a0ed55efce297bd1e2.png)
Membro desde: 12/12/2006 14:14:55
Mensagens: 508
Localização: Porto Alegre
Offline
|
Mas isso não explica cara.
Veja a classe Object:
O método clone "protected native Object clone()" como é protected, qualquer classe que herde de Object pode dar override esse método. Como todas as classes em java herdam implicitamente de Object, pela teoria eu podeia dar um override neste método, mas não é o que acontece caso eu queria utilizar esse método tenho que implementar a interface Cloneable como neste exemplo:
Minha dúvida é, porque eu tenho que implementar a interface Cloneable ?
This message was edited 1 time. Last update was at 17/07/2008 15:15:06
|
Nunca desista antes de conseguir. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 15:23:01
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Puppets wrote:
Tanto em Java quanto em C# existem essas interfaces, posso citar outro exemplo em java, a interface Cloneable, nesta interface minha dúvida ainda
é maior pois eu só posso sobrescrever o método clone da classe Object caso eu implemente essa interface, alguém sabe o porque disso ?
Coisas que existem em C# e Java não devem ser estranhas porque o C# é uma adpatação do Java ( aka um copia distorcida)
Interfaces sem métodos são chamadas interfaces marcadoras. Elas existem por dois motivos: no inicio do java não existiam anotações. Se existisse teríamos o seguinte:
Segundo, interfaces podem mudar. Embora isso seja totalmente desaconselhado não é impossível (vide sql.DataSource). Isso forçaria todas as classes a implementar um novo método.
Minha dúvida é, porque eu tenho que implementar a interface Cloneable ?
Para que "clone" seja visivel. "clone" já existem todos os objetos mas é protected. Cloneable informa que deve existir um método publico chamado clone. Quando a JVM não encontra isso dá problema.
This message was edited 1 time. Last update was at 17/07/2008 15:25:21
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|