Duvidas simples de certificação JAVA - Diferença entre Classe Abstrata e Interface

Java

21/02/2014

Pessoal Estou começando a estudar java a fundo para possível certificação mas estou com duvidas básicas sobre Interface e Classe Abstrata. O que vem a ser interface e qual as diferença entre esta e uma classe abstrata? valeu.. Ps: estou lendo o livro, mas não entendi bem a explicação.
Francisco Afonso

Francisco Afonso

Curtidas 0

Respostas

Andro Louredo.

Andro Louredo.

21/02/2014

Uma interface é um conjunto de métodos públicos, sem implementação, que deverão ser implementados pela classe que utiliza essa interface. Uma interface não pode ser instanciada. Um classe pode implementar diversas interfaces diferentes. Costumasse dizer que uma interface é uma classe 100% abstrata. Todos os métodos assinados são públicos e abstratos, mesmo que não seja adicionado explicitamente em sua assinatura. É útil por exemplo, quando você quer que classes tenham métodos com a mesma assinatura mas implementações diferentes, você cria uma interface para definir assinatura destes métodos. As classes então implementam eles da maneira que querem. Classe abstrata não pode ser instanciada, só herdada. Possui métodos abstratos e/ou métodos já implementados. Quem herda a classe abstrata deverá implementar os métodos abstratos, e consequentemente herdará a implementação dos métodos já implementados. É útil quando você precisa definir o corpo dos métodos e se ainda assim precisar, pode criar métodos abstratos para serem implementados pela classe que herda ela. Por exemplo, se você tem um DAO, você pode criar uma interface com a assinatura de métodos como save, update, remove, find... Cada classe que implementar essa interface terá sua própria implementação para cada método. Caso todas as classes usem a mesma implementação para os métodos save, update e remove, mas os métodos find são específicos para cada classe, você pode criar uma classe abstrata ao invés da interface. Assim, implementaria os métodos save, update e remove, uma unica vez para todas as classes, mas deixaria o método find como abstrato, para que cada classe fosse obrigada a criar sua própria implementação para esse método.
GOSTEI 0
André Pereira

André Pereira

21/02/2014

[quote="xikobol"]Pessoal Estou começando a estudar java a fundo para possível certificação mas estou com duvidas básicas sobre Interface e Classe Abstrata. O que vem a ser interface e qual as diferença entre esta e uma classe abstrata? valeu.. Ps: estou lendo o livro, mas não entendi bem a explicação.
Acho que um ótimo lugar para você tirar essa dúvida além do amigo ai de cima, é na Devmedia, sempre pesquisei por lá, o conteúdo é muito, leia sobre a explicação em [url=https://www.devmedia.com.br/interfaces-x-classes-abstratas/13337]Interfaces X Classes Abstratas[/url].
GOSTEI 0
Lucas Levi

Lucas Levi

21/02/2014

[quote="romarcio"]Uma interface é um conjunto de métodos públicos, sem implementação, que deverão ser implementados pela classe que utiliza essa interface. Uma interface não pode ser instanciada. Um classe pode implementar diversas interfaces diferentes. Costumasse dizer que uma interface é uma classe 100% abstrata. Todos os métodos assinados são públicos e abstratos, mesmo que não seja adicionado explicitamente em sua assinatura. É útil por exemplo, quando você quer que classes tenham métodos com a mesma assinatura mas implementações diferentes, você cria uma interface para definir assinatura destes métodos. As classes então implementam eles da maneira que querem. Classe abstrata não pode ser instanciada, só herdada. Possui métodos abstratos e/ou métodos já implementados. Quem herda a classe abstrata deverá implementar os métodos abstratos, e consequentemente herdará a implementação dos métodos já implementados. É útil quando você precisa definir o corpo dos métodos e se ainda assim precisar, pode criar métodos abstratos para serem implementados pela classe que herda ela. Por exemplo, se você tem um DAO, você pode criar uma interface com a assinatura de métodos como save, update, remove, find... Cada classe que implementar essa interface terá sua própria implementação para cada método. Caso todas as classes usem a mesma implementação para os métodos save, update e remove, mas os métodos find são específicos para cada classe, você pode criar uma classe abstrata ao invés da interface. Assim, implementaria os métodos save, update e remove, uma unica vez para todas as classes, mas deixaria o método find como abstrato, para que cada classe fosse obrigada a criar sua própria implementação para esse método.
Você esqueceu de falar da herança múltipla, que na minha opinião é a única vantagem de utilizar Interfaces.
GOSTEI 0
Andro Louredo.

Andro Louredo.

21/02/2014

[quote="xChupaKabrax"][quote="romarcio"]Uma interface é um conjunto de métodos públicos, sem implementação, que deverão ser implementados pela classe que utiliza essa interface. Uma interface não pode ser instanciada. Um classe pode implementar diversas interfaces diferentes. Costumasse dizer que uma interface é uma classe 100% abstrata. Todos os métodos assinados são públicos e abstratos, mesmo que não seja adicionado explicitamente em sua assinatura. É útil por exemplo, quando você quer que classes tenham métodos com a mesma assinatura mas implementações diferentes, você cria uma interface para definir assinatura destes métodos. As classes então implementam eles da maneira que querem. Classe abstrata não pode ser instanciada, só herdada. Possui métodos abstratos e/ou métodos já implementados. Quem herda a classe abstrata deverá implementar os métodos abstratos, e consequentemente herdará a implementação dos métodos já implementados. É útil quando você precisa definir o corpo dos métodos e se ainda assim precisar, pode criar métodos abstratos para serem implementados pela classe que herda ela. Por exemplo, se você tem um DAO, você pode criar uma interface com a assinatura de métodos como save, update, remove, find... Cada classe que implementar essa interface terá sua própria implementação para cada método. Caso todas as classes usem a mesma implementação para os métodos save, update e remove, mas os métodos find são específicos para cada classe, você pode criar uma classe abstrata ao invés da interface. Assim, implementaria os métodos save, update e remove, uma unica vez para todas as classes, mas deixaria o método find como abstrato, para que cada classe fosse obrigada a criar sua própria implementação para esse método.
Você esqueceu de falar da herança múltipla, que na minha opinião é a única vantagem de utilizar Interfaces.
Muito cuidado ao dizer "Herança Múltipla" em Java. O Java suporta apenas herança simples, ou seja, só pode herdar de uma única classe. Entretanto, se pode implementar diversas interfaces porque a Interface é um [b]contrato[/b], onde a classe que implementa a interface se compromete implementar todos os métodos existentes em tal interface. Você não Herda interface, você Implementa. Herança múltipla seria algo do tipo:
public class Filho extends Pai, Mae, Avo { ... }
GOSTEI 0
Andro Louredo.

Andro Louredo.

21/02/2014

Eu sei disso, falei herança porque o relacionamento entre uma interface e uma classe que a implementa é um relacionamento [b]é um[/b], causando o mesmo efeito de estender uma classe abstrata que contenha apenas métodos públicos e abstratos e campos públicos e estáticos.
GOSTEI 0
Andro Louredo.

Andro Louredo.

21/02/2014

[quote="xChupaKabrax"]Você esqueceu de falar da herança múltipla, que na minha opinião é a única vantagem de utilizar Interfaces.
Outros exemplos de vantagens: Interfaces aumentam o polimorfismo, por isso que você consegue simular uma herança múltipla. Com interfaces você reduz o acoplamento de código, o que facilita a manutenção e torna o software mais coeso.
GOSTEI 0
Luis Floriano

Luis Floriano

21/02/2014

[quote="xChupaKabrax"]Eu sei disso, falei herança porque o relacionamento entre uma interface e uma classe que a implementa é um relacionamento [b]é um[/b], causando o mesmo efeito de estender uma classe abstrata que contenha apenas métodos públicos e abstratos e campos públicos e estáticos.
Mas se ele diz isso na prova dele de certificacao acho que estara errado, pode confundir
GOSTEI 0
POSTAR