Na programação orientada a objetos, uma classe abstrata é uma classe que não pode ser instanciada. Ela é destinada a ser um modelo para outras classes herdarem. Classes abstratas contêm métodos abstratos, que são métodos declarados mas não implementados na classe abstrata. Estes métodos devem ser implementados nas classes filhas que herdam da classe abstracta. Mas quando é que devemos utilizar uma classe abstracta e qual a sua relação com a herança em Java?
Antes de mergulhar nas classes abstratas e na herança, é importante entender os tipos de modificadores de acesso que podem ser usados em Java. Os modificadores de acesso determinam o nível de acesso que outras classes têm a uma determinada classe ou a seus membros. Existem quatro tipos de modificadores de acesso em Java: público, privado, protegido e padrão.
O acesso público permite que uma classe seja acedida a partir de qualquer ponto do programa. O acesso privado restringe o acesso apenas dentro da mesma classe. O acesso protegido permite o acesso dentro da mesma classe e das suas subclasses. O acesso padrão (também conhecido como acesso pacote-privado) permite o acesso dentro do mesmo pacote.
Herança em Java
A herança é um mecanismo na programação orientada a objectos em que uma classe pode herdar propriedades e métodos de outra classe. A classe que está sendo herdada é chamada de superclasse ou classe pai, e a classe que está herdando é chamada de subclasse ou classe filha. A classe filha pode adicionar as suas próprias propriedades e métodos, para além dos que herda da classe pai.
Existem três tipos de herança em Java: herança simples, herança múltipla e herança hierárquica. A herança simples é aquela em que uma subclasse herda apenas de uma superclasse. A herança múltipla é quando uma subclasse herda de várias superclasses. Herança hierárquica é quando várias subclasses herdam da mesma superclasse.
Na programação orientada a objectos, as entidades podem ser classificadas em três categorias: abstractas, concretas e de instância. As entidades abstractas são entidades que não podem ser instanciadas directamente, como as classes abstractas. As entidades concretas são entidades que podem ser instanciadas, como as classes regulares. As entidades de instância são objectos que são criados a partir de classes concretas.
Classificando uma Entidade
Para classificar uma entidade, você deve determinar se ela pode ser instanciada diretamente ou não. Se ela pode ser instanciada diretamente, ela é uma entidade concreta. Se ela não pode ser instanciada diretamente, ela é uma entidade abstrata ou uma subclasse de uma entidade abstrata.
Entidade de instância
Uma entidade de instância é um objecto que é criado a partir de uma classe concreta. Ela contém todas as propriedades e métodos definidos em sua classe, bem como quaisquer propriedades e métodos herdados de sua(s) classe(s) pai(s).
Em conclusão, as classes abstractas são utilizadas quando se pretende criar um modelo a partir do qual outras classes possam herdar. Contêm métodos abstractos que devem ser implementados nas classes filhas. A herança é um mecanismo que permite que as subclasses herdem propriedades e métodos das suas classes-mãe. Existem três tipos de herança em Java: simples, múltipla e hierárquica. As entidades podem ser classificadas nas categorias abstracta, concreta e de instância. Para classificar uma entidade, é necessário determinar se esta pode ser instanciada directamente ou não. E uma entidade de instância é um objecto que é criado a partir de uma classe concreta.
A abstracção de dados em Java refere-se ao processo de esconder do utilizador os detalhes de implementação das variáveis e métodos de dados e mostrar apenas a informação necessária. Isto é conseguido através da utilização de classes abstractas e interfaces, que fornecem um modelo para a implementação de classes, ocultando os seus detalhes internos. Ao utilizar a abstracção de dados, os programadores podem criar código mais eficiente e seguro, bem como reduzir a complexidade dos seus programas.
Em Java, uma classe concreta é uma classe que não é abstracta e pode ser instanciada para criar objectos. Fornece a implementação de todos os métodos abstractos definidos na sua classe ou interface abstracta-mãe. Ao contrário das classes abstractas, as classes concretas podem ser instanciadas directamente e utilizadas para criar objectos. São normalmente utilizadas na programação Java para definir objectos com propriedades e comportamentos específicos.