public interface Comestivel {
void metodo();
void comer();
}
e a seguinte classe:
public class Fruta {
public Fruta() {
}
public void metodo() {
//...
}
public void comer() {
System.out.println("Comer");
}
}
Como pode perceber Fruta não implementa Comestivel.
a classe morango, concreta, implementa Comestivel e herda Fruta, precisa implementar os metodos de Comestivel ?? Perceba que existam metodos com os mesmos nomes em Fruta.
public class Morango extends Fruta implements Comestivel{
}
O código abaixo funciona… compila e executa… mas no livro da Kathy Sierra fala que nesse caso não funciona, não verdade ele fala que só funciona se Fruta declarasse que implementa Comestivel. Se funcionou o livro tá errado nesse ponto ?
porque nesse caso, Morango extende Fruta, ou seja, Morango é uma Fruta,
e Fruta, já implementou os métodos de Comestivel, por isso não há a necessidade de vc implementar estes métodos.
[quote]porque nesse caso, Morango extende Fruta, ou seja, Morango é uma Fruta,
e Fruta, já implementou os métodos de Comestivel, por isso não há a necessidade de vc implementar estes métodos.[/quote]
pois é… foi o que entendi também… mas no livro tá falando que isso só funciona quando a superclasse também implementa a interface… isto é… se Fruta fosse implements Comestivel. Achei estranho o livro tá escrito isso… Isso tá errado no livro num tá ?
no livro fala assim:
“Se qualquer classe da sua árvore de herança já tiver fornecido implementações concretas (ou seja, não-abstract) dos métodos, e tiver declarado que ela (a superclasse) está implementando a interface, então a subclasse não tem obrigação nenhuma de reimplementar (sobrescrever) esses métodos.”
mas pelo teste percebe-se que não precisa que a superclasse esteja implementando a interface… fail…
[quote=evertonsilvagomesjava]Cara isso ai nao compila nao, do jeito que vc postou o codigo ai nao compila nao, a class “Fruta” tem os mesmos nomes de métodos da interface “Comestivel”, logo a class “Morango” herdando “Fruta” e implementando “Comestivel” vai da erro de compilaçao, o compilador vai perceber que os métodos de “Fruta” nao sao abstratos e ai vem o erro de compilaçao, pois “Fruta” nesse caso nao esta implementando “Comestivel” e portanto nao pode esconder os métodos dessa interface.
So iria compilar e “Morango” nao precisaria implementar os metodos se “Fruta” implementasse “Comestivel”.[/quote]
Eita, porque o código não compilaria!?
Se Morago É uma Fruta e também um Comestivel e se TODA Fruta possui a implementação dos métodos abstratos declarados na interface Comestível, então não falta mais nada.
Não vai haver nenhum conflito, o compilador não irá interpretar os métodos de Comestível e Fruta como iguais, isso não existe. Ele vai entender que os métodos contidos em Fruta são a implementação dos métodos da interface Comestível.
@viniciuslaine
Sobre a citação do livro da Kathy, acho que você interpretou algo de forma errada. Tanto Fruta implementando Comestível, quanto Morango implementando Comestivel, nesse caso, se comportará da mesma maneira.
Creio que algo não tenha ficado claro sobre alguma explicação contida no livro.
brodo eu até tirei meu comentario rs, pq eu fiz confusao e deixei os métodos em Fruta como “default” ai sim n compilaria xD…Mas vc ta correto mesmo Morango herdando Fruta logo contém os metodos de Comestivel.
[quote=brrodo]
Sobre a citação do livro da Kathy, acho que você interpretou algo de forma errada. Tanto Fruta implementando Comestível, quanto Morango implementando Comestivel, nesse caso, se comportará da mesma maneira.
Creio que algo não tenha ficado claro sobre alguma explicação contida no livro.[/quote]
Mas o que ela escreveu tá bem ambíguo num tá ? dá pra entender que é só nesse caso como também não fala que não é. Acho q de primeira entendi que não funcionava, e ia acabar acreditando que não funcionava mesmo, se não tivesse testado.
Pode ter sido a tradução, ou sei lá, mas que tá ambiguo tá… heheh
[quote=viniciuslaine][quote=brrodo]
Sobre a citação do livro da Kathy, acho que você interpretou algo de forma errada. Tanto Fruta implementando Comestível, quanto Morango implementando Comestivel, nesse caso, se comportará da mesma maneira.
Creio que algo não tenha ficado claro sobre alguma explicação contida no livro.[/quote]
Mas o que ela escreveu tá bem ambíguo num tá ? dá pra entender que é só nesse caso como também não fala que não é. Acho q de primeira entendi que não funcionava, e ia acabar acreditando que não funcionava mesmo, se não tivesse testado.
Pode ter sido a tradução, ou sei lá, mas que tá ambiguo tá… heheh
[/quote]
Você podia colar o trecho do livro que cita isso, talvez possamos ajudar, pois realmente é estranho.
Nunca vi a versão traduzida, mas com certeza não é recomendável estudar para as certificações usando material traduzido.
[quote=brrodo][quote=viniciuslaine][quote=brrodo]
Sobre a citação do livro da Kathy, acho que você interpretou algo de forma errada. Tanto Fruta implementando Comestível, quanto Morango implementando Comestivel, nesse caso, se comportará da mesma maneira.
Creio que algo não tenha ficado claro sobre alguma explicação contida no livro.[/quote]
Mas o que ela escreveu tá bem ambíguo num tá ? dá pra entender que é só nesse caso como também não fala que não é. Acho q de primeira entendi que não funcionava, e ia acabar acreditando que não funcionava mesmo, se não tivesse testado.
Pode ter sido a tradução, ou sei lá, mas que tá ambiguo tá… heheh
[/quote]
Você podia colar o trecho do livro que cita isso, talvez possamos ajudar, pois realmente é estranho.
Nunca vi a versão traduzida, mas com certeza não é recomendável estudar para as certificações usando material traduzido. [/quote]
Já coloquei o trecho… mas coloco de novo.:
Se bem que se você pensar como ficaria esse trecho em ingles num teria como haver erro de tradução não… corrijam-me se estiver errado…
[quote=brrodo] O trecho está correto, repare que está escrito que “… então a subclasse não tem obrigação nenhuma de reimplementar (sobrescrever) esses métodos.”.
Na verdade, eu não entendi onde está o problema neste trecho, ele ilustra perfeitamente e situação citada.
Por este trecho não tem como vc deduzir que tal situação causaria erro de compilação.[/quote]
Se você interpretou que o trecho não tem como deduzir a situação então você está precisando estudar um pouco de português…
“Se qualquer classe da sua árvore de herança já tiver fornecido implementações concretas (ou seja, não-abstract) dos métodos, E tiver declarado que ela (a superclasse) está implementando a interface, então a subclasse não tem obrigação nenhuma de reimplementar (sobrescrever) esses métodos.”
Ele diz, se a super classe já tiver fornecido implementações E tiver declarado que está implementado a interface…
isso quer dizer que tem q fazer as duas coisas…
acho que isso ai poder ser meio que tradução do livro meio errada, sei la…
[quote=Frango][quote=brrodo] O trecho está correto, repare que está escrito que “… então a subclasse não tem obrigação nenhuma de reimplementar (sobrescrever) esses métodos.”.
Na verdade, eu não entendi onde está o problema neste trecho, ele ilustra perfeitamente e situação citada.
Por este trecho não tem como vc deduzir que tal situação causaria erro de compilação.[/quote]
Se você interpretou que o trecho não tem como deduzir a situação então você está precisando estudar um pouco de português…
“Se qualquer classe da sua árvore de herança já tiver fornecido implementações concretas (ou seja, não-abstract) dos métodos, E tiver declarado que ela (a superclasse) está implementando a interface, então a subclasse não tem obrigação nenhuma de reimplementar (sobrescrever) esses métodos.”
Ele diz, se a super classe já tiver fornecido implementações E tiver declarado que está implementado a interface…
isso quer dizer que tem q fazer as duas coisas…
acho que isso ai poder ser meio que tradução do livro meio errada, sei la…[/quote]
…e onde ali está dizendo que outra situação sem ser esta (como a citada no tópico), causaria erro?
Tanto a situação proposta pelo trecho do livro quanto a postada no início do tópico estão corretas…e este trecho não restringe o funcionamento à nenhum dos 2 casos. Ele simplismente ilustra UMA situação.
se ele fala que se for feita está situação então a subclasse não precisa reimplementar esses métodos, eu penso que de outra maneira precisaria reimplementar…
posso estar interpretando errado, mas eu entenderia dessa forma…
não estou discutindo sobre java, e sim sobre o texto que, na minha opinião, leva a entender que é necessário que a super classe também implemente a interface.
é só a minha opinião, desculpe o post antigo de forma ofensiva…
[quote=Frango]se ele fala que se for feita está situação então a subclasse não precisa reimplementar esses métodos, eu penso que de outra maneira precisaria reimplementar…
posso estar interpretando errado, mas eu entenderia dessa forma…
não estou discutindo sobre java, e sim sobre o texto que, na minha opinião, leva a entender que é necessário que a super classe também implemente a interface.
é só a minha opinião, desculpe o post antigo de forma ofensiva…[/quote]
É, eu não entendi o por que da ofensa gratuita, mas tudo bem, não deveria ter revidado tbm.
…mas realmente pra mim esse trecho não restringe o funcionamento apenas à situação que ele cita. Ainda mais conhecendo o estilo desse tipo de livro preparatório, que deixa sempre bem claro quando algo PODE, DEVE OU NÃO DEVE ser feito. Sempre há um MUST ou COULD bem destacado nessas situações.
Eu estou convencido que o autor do tópico interpretou de forma errada o trecho.
Acontece…
[quote=brrodo][quote=Frango]se ele fala que se for feita está situação então a subclasse não precisa reimplementar esses métodos, eu penso que de outra maneira precisaria reimplementar…
posso estar interpretando errado, mas eu entenderia dessa forma…
não estou discutindo sobre java, e sim sobre o texto que, na minha opinião, leva a entender que é necessário que a super classe também implemente a interface.
é só a minha opinião, desculpe o post antigo de forma ofensiva…[/quote]
É, eu não entendi o por que da ofensa gratuita, mas tudo bem, não deveria ter revidado tbm.
…mas realmente pra mim esse trecho não restringe o funcionamento apenas à situação que ele cita. Ainda mais conhecendo o estilo desse tipo de livro preparatório, que deixa sempre bem claro quando algo PODE, DEVE OU NÃO DEVE ser feito. Sempre há um MUST ou COULD bem destacado nessas situações.
Eu estou convencido que o autor do tópico interpretou de forma errada o trecho.
Acontece…[/quote]
Foi como eu disse… tá ambíguo… sabendo como funciona de verdade fica mais fácil analizar… mas como eu disse… Lendo esse trecho pela primeira vez, sem ter testado isso ainda, tive a impressão, como o Frango falou, que o E acaba delimitando um nicho de funcionamento. “Quando for assim E assim, isso acontece…” mas como vc disse Brrodo, também não deixa explícito que do outro jeito não funcione…
Dá pra entender dos dois jeitos… acho que o mais importante dessa história toda foi a análise do caso… achei bem interessante … e pelo menos a gente e quem seguiu esse tópico agora sabe que dos dois jeitos funcionam… hehehehe
Devo colocar esse tópico como resolvido ?? rsrsrs…