Diferença entre classe abstrata e herança
Classe abstrata vs herança
Classe abstrata e herança são dois conceitos orientados a objetos importantes 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 ampliem outras classes. Classe abstrata é uma classe que não pode ser inicializada, mas pode ser estendida. Portanto, as classes abstratas só são significativas se a linguagem de programação suportar a 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 classe (super).
O que é Abstract Class?
Tipicamente, as classes abstratas, também conhecidas como Classes de Base abstrata (ABC), não podem ser instanciadas (uma instância dessa classe não pode ser criada). Assim, as classes abstratas só são significativas se a linguagem de programação suportar a herança (capacidade de criar subclasses de extensão de uma classe). As classes abstratas geralmente representam um conceito ou entidade abstrata com implementação parcial ou não. Portanto, as classes abstratas atuam como classes pai a partir das quais as classes filho são derivadas para que a classe filho compartilhe os recursos incompletos da classe pai e a funcionalidade pode ser adicionada para completá-los.
As classes abstratas podem conter métodos abstratos. Subclasses que estendem uma classe abstrata podem implementar esses métodos (herdados) abstratos. Se a classe infantil implementar todos esses métodos Abstract, é uma classe concreta. Mas, se não, a classe infantil também se torna uma classe abstrata. O que tudo isso significa é que, quando o programador designa uma aula como um Abstrato, ela está dizendo que a classe estará incompleta e terá elementos que precisam ser completados pelas subclasses herdadas. Esta é uma ótima maneira de criar um contrato entre dois programadores, o que simplifica tarefas no desenvolvimento de software. O programador, que escreve código para herdar, precisa seguir as definições do método exatamente (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 ampliem outras classes. Extensão de palavra-chave é usada para implementar o conceito de herança na linguagem de programação Java. A herança basicamente fornece 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 super classe (ou classe pai), essa subclasse herdará todos os atributos e métodos da super classe. A subclasse pode opcionalmente substituir o comportamento (fornecer funcionalidade nova ou estendida a métodos) herdados da classe pai.Normalmente, uma subclasse não pode estender múltiplas super-classes (por exemplo, em Java). Portanto, você não pode usar extensões para múltiplas heranças. Para ter múltiplas heranças, você precisa usar interfaces.
Qual a diferença entre a classe abstrata e a herança?
As classes abstratas geralmente representam um conceito abstrato ou uma entidade com implementação parcial ou não. A herança permite que novas classes ampliem outras classes. Como, as classes abstratas não podem ser instanciadas, você precisa usar o conceito de herança para fazer uso de classes abstratas. Caso contrário, uma classe abstrata não usa. 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 qualquer 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 (esta não é uma qualidade de classes abstratas per se, mas sim uma restrição de herança).