ótimas explicações, Fábio!
só vou complementar esta parte...
>>>>CLASSE ABSTRATA
Uma classe que possui um ou mais métodos que não tem implementação, ou seja, o método é declarado mas não tem código no seu corpo. Resumindo, você define só a assinatura do método. Veja que podemos ter métodos não abstratos na classe abstrata, mas basta que tenhamos UM único método abstrato para que a classe seja dita abstrata. OBS.: O VFP NÃO reforça este conceito, mas ele pode ser simulado...
Classes abstratas também são classes que NUNCA serão instanciadas diretamente... por exemplo, imagine uma classe que seja "Receita", e uma sub-classe que seja "Receita de Lasanha".
A classe Receita nunca será instanciada... não tem sentido, pois a receita tem que ser de "alguma coisa"... sendo assim, a "Receita" é uma classe abstrata.
Já a classe "Receita de Lasanha" será instanciada (quem instanciar uma aí, pode me convidar :) ). Assim, ela é chamada de Classe Concreta.
Então, é só lembrar que, se uma classe é utilizável por ela mesma, ela é concreta, caso contrário, ela é abstrata, pois define somente define a interface.
Claudio Lassala