Usuário com melhor resposta
Classe Abstrata x Interface

Pergunta
-
Pessoal,
Antes de fazer esse post, li alguns anteriores, mas nenhum respondeu o que eu quero saber. Falaram que na abstrata tem implementação e na interface não. Tá... Mas eu posso definir uma classe abstrata com métodos abstratos, a qual trabalharia como uma interface.
Qual a diferença entre usar uma classe abstrata com métodos abstratos para utilizar uma interface.
Isso já tá dando nó nos neurônios. rsrsrsrs
Obrigado a todos que puderem ajudar a esclarecer.
Respostas
-
LSCampos, sem problemas...
Uma interface é parecida com uma classe abstrata; a diferença é que uma classe abstrata pode possuir métodos que não estejam implementados e pode possuir métodos que estejam implementados e uma interface somente possui métodos que não possuem implementação.Geralmente a interface é usada para existir um padrão, ou seja todos os programadores que estiverem no projeto faram os metodos com a mesma assinatura...
Classes Abstratas
Pode acontecer que ao escrever um método para uma classe você não saiba como ele vai ser implementado. Neste caso, a implementação será feita pela classe que herdar o método (a classe filha).
Pode acontecer também que você saiba que um determinado método será sobreposto com certeza na classe filha; então por que definir sua implementação se ela não será usada ?.Nestes casos você apenas define a assinatura do método e deixa a definição por conta da classe irá herdar a classe pai.
Estas classes são então chamadas classes Abstratas e o método que você não implementou é chamado de método abstrato.
Um método abstrato é identificado pelo modificador - MustOverride - , e, a classe que possui este modificadoor não pode ser instanciada através da palavra chave New. Vamos a um exemplo:
Imports System
MustInherit
Class Formas
Public x As Integer = 9 Public y As Integer = 0
MustOverride Sub Desenho()
Public Function Informacao() As String Informacao = "Uma classe abstrata" End Function
End Class
Vamos agora criar uma classe que deverá extender a classe abstrata ao fazer isto deveremos fornecer a implementação para todos os métodos que precisam ser sobrepostos.
O método Desenho não esta implementado , apenas foi declarado , e deverá ser sobreposto na classe que herdar a classe Formas
Dizemos então que a classe
Formas é uma classe Abstrata
e o método Desenho é um método abstrato.
Interfaces
Uma interface somente possui métodos que não possuem implementação.
Uma interface possui somente métodos que não estão implementados e que devem ser implementados pela classe que usar a interface.
Como o VB.NET não suporta herança múltipla as interfaces permitem que uma classe extenda múltiplas interfaces contornando o problema (se é que isto é um problema ). Para implementar uma interface o VB.NET usamos o modificador - Implements .
As interfaces são declaradas usando a palavra-chave - Interface. Geralmente o nome dado a uma interface começa com a letra I. Podemos ter duas sintaxes para o uso com interfaces:
Interface IForma End Interface Class Linha Implements IForma End Class
Interface IForma End Interface Class Linha: Implements IForma End Class
- Uma interface no VB.NET não pode conter campos , somente pode ter métodos , propriedades e eventos. Todos os membros de uma interface são públicos e não podem usar um modificador de acesso.
- Na classe que implementa a interface , cada implementação do método precisa especificar o método da interface que ele implementa usando a palavra Implements seguido pelo nome da interface o nome do método.
Espero ter ajudado ou respondido;
Todas as Respostas
-
LSCampos, bom dia!
Classes abstratas não são instanciadas, assim como as interfaces também não são.
Classes abstratas permitem escrever algum método com implementação, as interfaces não permitem.
As interfaces regem as características de uma determinada classe. E uma classe pode implementar '0-n' interfaces. Diferente das classes abstratas, onde só pode herdar de uma única.Coso ainda tenha dúvidas...por favor (http://www.macoratti.net/net_ica1.htm)
Espero ter respondido ou ajudado vc;
-
César,
Isso responde parte da minha pergunta sim, mas esqueci de colocar o pq dessa dúvida. Quando usar um e quando usar outro? Existe alguma limitação em alguns casos onde vc teria como opção apenas uma dessas? Sei lá... Algo que funcionaria apenas com interface ou algo que funcionaria apenas com classe abstrata. Ou talvez que fosse mais indicado...
Obrigado pela atenção... -
LSCampos, sem problemas...
Uma interface é parecida com uma classe abstrata; a diferença é que uma classe abstrata pode possuir métodos que não estejam implementados e pode possuir métodos que estejam implementados e uma interface somente possui métodos que não possuem implementação.Geralmente a interface é usada para existir um padrão, ou seja todos os programadores que estiverem no projeto faram os metodos com a mesma assinatura...
Classes Abstratas
Pode acontecer que ao escrever um método para uma classe você não saiba como ele vai ser implementado. Neste caso, a implementação será feita pela classe que herdar o método (a classe filha).
Pode acontecer também que você saiba que um determinado método será sobreposto com certeza na classe filha; então por que definir sua implementação se ela não será usada ?.Nestes casos você apenas define a assinatura do método e deixa a definição por conta da classe irá herdar a classe pai.
Estas classes são então chamadas classes Abstratas e o método que você não implementou é chamado de método abstrato.
Um método abstrato é identificado pelo modificador - MustOverride - , e, a classe que possui este modificadoor não pode ser instanciada através da palavra chave New. Vamos a um exemplo:
Imports System
MustInherit
Class Formas
Public x As Integer = 9 Public y As Integer = 0
MustOverride Sub Desenho()
Public Function Informacao() As String Informacao = "Uma classe abstrata" End Function
End Class
Vamos agora criar uma classe que deverá extender a classe abstrata ao fazer isto deveremos fornecer a implementação para todos os métodos que precisam ser sobrepostos.
O método Desenho não esta implementado , apenas foi declarado , e deverá ser sobreposto na classe que herdar a classe Formas
Dizemos então que a classe
Formas é uma classe Abstrata
e o método Desenho é um método abstrato.
Interfaces
Uma interface somente possui métodos que não possuem implementação.
Uma interface possui somente métodos que não estão implementados e que devem ser implementados pela classe que usar a interface.
Como o VB.NET não suporta herança múltipla as interfaces permitem que uma classe extenda múltiplas interfaces contornando o problema (se é que isto é um problema ). Para implementar uma interface o VB.NET usamos o modificador - Implements .
As interfaces são declaradas usando a palavra-chave - Interface. Geralmente o nome dado a uma interface começa com a letra I. Podemos ter duas sintaxes para o uso com interfaces:
Interface IForma End Interface Class Linha Implements IForma End Class
Interface IForma End Interface Class Linha: Implements IForma End Class
- Uma interface no VB.NET não pode conter campos , somente pode ter métodos , propriedades e eventos. Todos os membros de uma interface são públicos e não podem usar um modificador de acesso.
- Na classe que implementa a interface , cada implementação do método precisa especificar o método da interface que ele implementa usando a palavra Implements seguido pelo nome da interface o nome do método.
Espero ter ajudado ou respondido;
-
-