Duvidas simples de certificação JAVA - Diferença entre Classe Abstrata e Interface
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
Curtidas 0
Respostas
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
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
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.
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. public class Filho extends Pai, Mae, Avo { ... }GOSTEI 0
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.
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
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