Classe Abstrata vs Herança
Classe abstrata e Herança são dois importantes conceitos orientados a objetos encontrados em muitas linguagens de programação orientadas a objetos, como Java. A classe abstrata pode ser considerada como uma versão abstrata de uma classe regular (concreta), enquanto a Herança permite que novas classes estendam outras classes. Classe abstrata é uma classe que não pode ser inicializada, mas pode ser estendida. Portanto, as classes abstratas são significativas apenas se a linguagem de programação suportar herança. Em Java, as classes Abstract são declaradas usando a palavra-chave Abstract, enquanto a palavra-chave Extends é usada para herdar de uma (super) classe.
O que é classe abstrata?
Normalmente, as classes abstratas, também conhecidas como Classes base abstratas (ABC), não podem ser instanciadas (uma instância dessa classe não pode ser criada). Portanto, as classes abstratas são significativas apenas se a linguagem de programação suportar herança (capacidade de criar subclasses a partir da extensão de uma classe). Classes abstratas geralmente representam um conceito abstrato ou entidade com implementação parcial ou inexistente. Portanto, as classes Abstratas atuam como classes pai das quais derivam as classes filho, de modo que a classe filho compartilhe os recursos incompletos da classe pai e a funcionalidade possa ser adicionada para completá-las..
Classes abstratas podem conter métodos abstratos. As subclasses que estendem uma classe abstrata podem implementar esses métodos abstratos (herdados). Se a classe filho implementar todos esses métodos abstratos, será uma classe concreta. Mas, se não, a classe filho também se torna uma classe abstrata. O que tudo isso significa é que, quando o programador nomeia uma classe como Resumo, ela está dizendo que a classe estará incompleta e terá elementos que precisam ser concluídos pelas subclasses herdadas. É uma boa maneira de criar um contrato entre dois programadores, o que simplifica as tarefas no desenvolvimento de software. O programador, que escreve o código para herdar, precisa seguir exatamente as definições do método (mas é claro que pode ter sua própria implementação).
O que é herança?
A herança é um conceito orientado a objetos, que permite que novas classes estendam outras classes. A palavra-chave Extends é usada para implementar o conceito de herança na linguagem de programação Java. A herança essencialmente fornece a reutilização de código, permitindo estender propriedades e comportamento de uma classe existente por uma classe recém-definida. Quando uma nova subclasse (ou classe derivada) estende uma superclasse (ou classe pai), essa subclasse herdará todos os atributos e métodos da superclasse. A subclasse pode opcionalmente substituir o comportamento (fornecer funcionalidade nova ou estendida aos métodos) herdada da classe pai. Normalmente, uma subclasse não pode estender várias superclasses (por exemplo, em Java). Portanto, você não pode usar extensões para herança múltipla. Para ter herança múltipla, você precisa usar interfaces.
Qual é a diferença entre Abstract Class e Herança?
Classes abstratas geralmente representam um conceito abstrato ou uma entidade com implementação parcial ou nenhuma implementação. A herança permite que novas classes estendam outras classes. Como as classes abstratas não podem ser instanciadas, é necessário usar o conceito de herança para fazer uso das classes abstratas. Caso contrário, uma classe Abstract não terá utilidade. As classes abstratas podem conter métodos abstratos e, quando a classe é estendida, todos os métodos (abstrato e concreto) são herdados. A classe herdada pode implementar um ou todos os métodos. Se todos os métodos Abstract não forem implementados, essa classe também se tornará uma classe Abstract. Uma classe não pode herdar de mais de uma classe abstrata (isso não é uma qualidade das classes abstratas por si só, mas uma restrição de herança).