O documento discute herança em programação orientada a objetos, definindo-a como a reutilização de código por meio da criação de novas classes a partir de classes existentes, formando uma hierarquia de classes relacionadas. Classes abstratas também são discutidas como classes que não podem ser instanciadas diretamente e servem como modelo para subclasses.
2. A herança é uma forma eficaz de reutilização de código.
Criamos novas classes a partir de classes já existentes,
absorvendo seus atributos e comportamentos.
Com a utilização da herança criamos uma hierarquia de
classes.
Essas classes estão relacionadas, ou seja, possuem
características semelhantes.
Herança
3. Herança
No paradigma orientado a objetos, podemos definir um conjunto de
classes em uma estrutura hierárquica onde cada uma das classes
“herda” características das suas superiores nesta estrutura.
No mundo real temos que uma pessoa herda características de
seus pais que herdaram de seus avós e assim por diante.
Respeitando as limitações das linguagens de programação, o que
acontece quando utilizamos herança no nosso código é uma
tentativa de implementar esta propriedade da natureza.
4. Herança
Uma relação entre duas classes;
A classe genérica é chamada de super classe, classe base ou classe mãe;
As classes específicas são chamadas de sub classes, classes derivadas
ou classes filhas.
Significa que “toda classe específica é uma especialização de classe
genérica”;
5. Herança em Java
No Java, não é possível que uma subclasse possua duas superclasses!
NÃO EXISTE HERANÇA MÚLTIPLA.
Superclasse: Nela estarão todos os métodos e atributos comuns às classes
específicas.
Subclasse: A subclasse possui tudo que a superclasse possui, acrescido de
suas especialidades;
6. Herança
Com a criação dessa hierarquia, surgem dois novos conceitos:
Superclasse (classe mãe)
Subclasse (classe filha)
O relacionamento criado entre uma superclasse e uma subclasse pode ser chamado de
relacionamento “é um”.
7. Herança
Dizemos que a subclasse estende da superclasse.
Então, para criarmos uma herança em nosso sistema, utilizamos a palavra reservada extends.
Exemplo:
public class Professor extends Funcionario {
}
No exemplos acima, dizemos que o Professor “é um” Funcionario.
Temos como superclasse o Funcionario e subclasse o Professor
8. Herança
Lembram do modificador de acesso protected?
É para ser utilizado juntamente com a herança.
Ou seja, todos os atributos ou métodos com o modificador
protected somente serão acessados por subclasses ou por outras
classes pertencentes ao mesmo pacote.
9. Herança
Se uma subclasse herda os comportamentos da superclasse, então
toda subclasse vai fazer as mesmas coisas da superclasse ?
1. Podemos adicionar comportamentos exclusivos da subclasse;
2. Podemos sobrescrever um comportamento existente na
superclasse.
11. Classes Abstratas
É um tipo de classe especial que não pode ser instanciada,
apenas herdada. Sendo assim, uma classe abstrata não pode ter
um objeto criado a partir de sua instanciação.
Essas classes são muito importantes quando não queremos criar
um objeto a partir de uma classe “geral”, apenas de suas
“subclasses”.
12. Classes Abstratas
Em Java definimos uma classe como abstrata utilizando uma palavra-
chave abstract na declaração da classe.
Uma classe abstrata é desenvolvida para representar entidades e
conceitos abstratos, sendo utilizados como uma classe pai, pois não
pode ser instanciada.
Ela define um modelo (template) para uma funcionalidade e aplicação
uma implementação incompleta - a parte genérica dessa funcionalidade
- que é compartilhada por um grupo de classes derivadas. Cada uma
das classes derivadas completa a funcionalidade da classe abstrata
adicionando um comentário específico.
13. Métodos e Classes Abstratas
Como vimos, subclasses podem redefinir (@Override) um método
definido em sua superclasse. Assim como podem usar o método
da forma como foi herdado da superclasse.
Para indicar que um método de uma classe deve ser
necessariamente redefinido em cada uma de suas subclasses este
método deve ser declarado como abstract.
O que é um método abstrato? É um método que não tem um
corpo, ou seja, um método não implementado.
14. Métodos e Classes Abstratas
Uma classe que contém um ou mais métodos abstratos deve ser
declarada explicitamente como abstrata.
Essa classe, no entanto, pode ter métodos concretos (não-
abstratos).
Declarar um método como abstrato é uma forma de obrigar o
programador a redefinir esse método em todas as subclasses para
as quais deseja criar objetos.