Olá, no tutorial passado começamos a falar sobre herança. Aprendemos quando usá-la, hoje aprenderemos como usá-la de forma correta, inclui-se aí como é a sintaxe dentro deste contexto.
Herança, é um recurso da Orientação a Objetos que permite a criação de novas classes (subclasses) partindo de outra classe já existente (superclasse). Estas subclasses herdarão métodos e atributos da superclasse. Este recurso nos permite escrever menos códigos e reutilizar um código já testado.
Mas e se uma superclasse não for especificada de forma explícita, o que acontece? Neste caso o Java entende que há uma relação de herança implícita com a classe Object, do pacote java.lang. A classe Object é a raiz de toda a hierarquia Java, visto que toda classe ainda que de forma indireta é uma subclasse da classe Object.
Assim para criar uma relação de herança é utilizada a palavra reservada extends. Agora muita atenção, a subclasse estende a superclasse, de quem ela herda os atributos e métodos.
HERANÇA ENTRE CLASSES
Para começarmos a definir as estruturas da nossa classe partindo do contexto de herança, utilizaremos o diagrama de classes abaixo:
Por exemplo, a “class Aluno{}” terá os atributos, dataMatricula, nomeEscola, serieMatriculado e disciplinas. E estenderá da “class Pessoa{}” todos os seus atributos. Assim sendo, dentro do package cursoJava.classes crie “class Pessoa{}”.
Até aqui tudo normal. O próximo passo será copiar para a “class Pessoa{}” todos os atributos que foram estabelecidos no diagrama de classes. Após isso gere os métodos getters and setters. Temos então a “class Aluno{}” que permanecerá apenas com os atributos também determinados no diagrama.
O modificador de acesso que na classe Aluno estava como private, agora no contexto da superclasse Pessoa deverá ser definido como protected. O modificador protected permite que um objeto possa ser acessado de uma classe que esteja no mesmo pacote. Ou ainda por objetos de classe que estejam na mesma hierarquia de herança.
Se não alterássemos o modificador de acesso dos atributos da superclasse não seria possível as subclasses acessá-los.
Agora, estando na “class Aluno{}”, iremos estender da “class Pessoa{}” todos os atributos e métodos. Para isso, utilizaremos a palavra reservada extends. Veja o exemplo abaixo:
public class Aluno extends Pessoa{}
Feito todas estas modificações, ainda resta remover todos os “this” dos métodos setters, ou substituí-los pela palavrar reservada, “super”. Ao utilizar o super (recomendado) estaremos referenciando explicitamente que os atributos são de uma superclasse.
Dessa forma criaremos as subclasses Diretor{} e Secretario{}, com os seus respectivos atributos. Lembre de gerar também para eles os métodos getters and setters.
EM POUCAS PALAVRAS
Jamais trabalharemos diretamente dentro do escopo de uma superclasse. E isso porque mesmo representando uma pessoa, ela está em um contexto generalista. Especificamente não representando nada. Porém, serve de base para o surgimento de classes derivadas que compartilham as mesmas características.
Então é isso desenvolvedores, vocês acompanharam na prática o potencial de um diagrama de classe. Partindo de um diagrama já estruturado fomos capazes de implementar rapidamente as classes. Espero que tenham gostado. Nos vemos no próximo.