Classe Concreta: É uma classe que possui atributos, métodos construtores e outros e pode ser instanciada, ou seja, permite a criação de objetos a partir dela. Classes concretas podem ser herdadas por outras classes.
public class Aluno { private String nome; private String ra;
public Aluno() { } public Aluno(String nome, String ra) { this.nome = nome; this.ra = ra; } public String Nome { get { return this.nome; } set { this.nome = value; } } public String Ra { get { return this.ra; } set { this.ra= value; } } } Classe Abstrata: Possui a mesma estrutura de uma classe concreta com a diferença que tem um modificador abstract em sua definição. Não podem ser instanciadas, ou seja, não se obtem objetos através delas. Classes abstratas podem ser herdadas por outras classes abstratas ou concretas possibilitando o polimorfismo.
public abstract class Aluno { private String nome; private String ra;
public Aluno() { } public Aluno(String nome, String ra) { this.nome = nome; this.ra = ra; } public String Nome { get { return this.nome; } set { this.nome = value; } } public String Ra { get { return this.ra; } set { this.ra= value; } } }
Interface: São utilizadas para definição de um modelo através da assinatura de métodos que DEVERÃO ser implementados pelas classes que a herdarem. O uso de interfaces possibilita o polimorfismo. Não existe implementação nas interfaces e estas também não podem ser instanciadas.
public interface IAluno
{
Double CalculaMediaFinal(IDictionary notas);
Double CalculaMediaBimestral(IDictionary notas);
}
public class Aluno: IAluno { public Double CalculaMediaFinal(IDictionary notas) { // Implementa-se a lógica do cálculo aqui }
public Double CalculaMediaBimestral(IDictionary notas) { // Implementa-se a lógica do cálculo aqui } }
fonte : http://social.msdn.microsoft.com/Forums/en-US/aspnetpt/thread/222ac110-1b0e-4f65-b7fb-9d950a502e07