Às vezes, você deseja criar classes que funcionam apenas como abstrações e não precisam, necessariamente, ser instanciadas sempre. Tais classes são chamadas de classes abstratas. Pelo mesmo token, há momentos em que determinados métodos precisam ser implementados de forma diferente para cada subclasse que implementa a superclasse. Esses métodos são métodos abstratos. Estas são algumas regras básicas para classes e métodos abstratos:
Suponha que você não quer permitir que a classe Employee seja instanciada diretamente. Basta declará-la usando a palavra-chave abstract e pronto:
Suponha que você precisa de um método para examinar o estado de um objeto Employee e garantir que seja válido. Essa necessidade pareceria ser comum para todos os objetos Employee, mas se comportaria de forma suficientemente diferente entre todas as possíveis subclasses nas quais tem potencial zero de reutilização. Neste caso, você declara o método validate() como abstract (forçando todas as subclasses a implementá-lo):