Interface e implementação da interface

Bom dia

Gostaria de saber qual a vantagem de se criar uma classe abstrata ou uma interface e depois implementá-la?

Quais são meus ganhos em realizar dessa forma? Onde “devo” usar essa forma?

Espero que tenha ficado claro minha dúvida

Obrigado

[quote=paulofernandesjr]Bom dia

Gostaria de saber qual a vantagem de se criar uma classe abstrata ou uma interface e depois implementá-la?

Quais são meus ganhos em realizar dessa forma? Onde “devo” usar essa forma?

Espero que tenha ficado claro minha dúvida

Obrigado[/quote]

É o seguinte quando vc tem um ou varios metodos q toda vez que vc criar uma subclasse ele tera q ser sobrescrito eh interessante usar classes abstratas ou quando sua classe naum puder ser instanciada, apenas herdada.

ex:

[code] abstract class Animal {

abstract void comer();

}
class Leao extends Animal{

void comer(){
System.out.println("Carne");	
}

}

class Vaca extends Animal{

void comer(){
System.out.println("Capim");	
}

}

class Coelho extends Animal{

void comer(){
System.out.println("Cenoura");	
}

}[/code]
Espero ter ajudado

[quote=paulofernandesjr]Bom dia

Gostaria de saber qual a vantagem de se criar uma classe abstrata ou uma interface e depois implementá-la?

Quais são meus ganhos em realizar dessa forma? Onde “devo” usar essa forma?

[/quote]

É dificil responder a essa pergunta porque os ganhos não são tecnologicos, são de modelagem.

Um conceito é colocado como uma interface se ele representa uma atividade ou um conjunto de ações. Por exemplo, Clonable representa que objeto pode ser clonado, Serializable representa que pode ser serializado. Nenhuma destas interfaces tem métodos. Outras como Collection ou List tem métodos que atuam sobre um conjunto de objetos. Vc usa uma interface quando quer desacoplar o contrato (a definição dos métodos) da implementação. Vc declara apenas o que o objeto poderá fazer e não o como. O como cabe apenas à implementação especifica.

Interfaces podem ser acopladas a outros objetos, portanto vc poderia criar um Pedido , por exemplo, que implemente Collection , poderia tecnologicamente fazer isto embora não faça muito sentido na modelagem. Repare que ao implementar collection , a classe Pedido ainda pode herdar de alguma outra classe que representa a sua hierarquia direta. Interfaces forma hierarquias indiretas ou diretas conforme se usem.

Classes abstratas servem exacamente para a mesma coisa que interface a diferença é que elas causam hierarquia direta (É-UM) pois a classe derivada não tem como herdar de outrem.

Ou seja, vc usa classes abstratas sempre que vc quer formar que os filhos sejam daquele tipo, e interfaces quando vc quer permitir que sejam de outros tipos.

Classes abstratas são tecnologicamente usadas para implementar uma série de padrões como Template Method, por exemplo. Contudo isso advém do entendimento e da modelagem do padrão. Neste caso a classe abstrata é uma ferramenta para facilitar o trabalho mas não é necessária se olharmos o modelo.

outro tipo de classe abstrata são as classes abstratas que implementam uma interface com objetivo de simplificar as implementações da interface. Por exemplo AbstractList e AbstractCollection são exemplos. Isto é feito para simplificar o trabalho do programador para implementar as interfaces e não para alterar o modelo ou a modelagem. contudo, ao usar uma classe abstrata estamos forçando que quem a herdar terá sua hierarquia direta definida automaticamente cujo topo é a interface implementada pela classe abstrata.

Ambos são usado num caso de 1-para-muitos em que vc tem um contrato e muitas implementações possíveis.

Entendi, muito obrigado pela ajuda

Dá uma lida:
http://www.guj.com.br/posts/list/55387.java#290673