30.06.2013 Views

Apostila Java

Apostila Java

Apostila Java

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

HERANÇA E POLIMORFIS MO<br />

Se fôssemos criar uma classe para cada uma dessas categorias de funcionários, acabaríamos repetindo<br />

muito código, além do quê, perderíamos a importante relação existente entre os objetos dessas classes:<br />

todos são funcionários.<br />

Para resolver isso, a Orientação a Objetos define o conceito de herança, permitindo que subclasses<br />

sejam criadas a partir de uma classe original, mais genérica e conhecida como superclasse.<br />

No nosso exemplo, teremos a seguinte hierarquia de classes:<br />

nível 0<br />

nível 1<br />

nível 2<br />

SUPERCLASSE<br />

SUBCLASSE<br />

SUB SUBCLASSE<br />

Uma das grandes vantagens do uso de subclasses é o aumento da confiabilidade e facilidade de<br />

manutenção dos sistemas. Se, por acaso, precisarmos mudar o comportamento da classe Funcionario,<br />

as demais classes refletirão essa mudança sem a necessidade de serem todas reimplementadas. Por<br />

exemplo, se a regra para o cálculo do décimo terceiro salário for alterada pelo governo, bastará ao<br />

desenvolvedor alterar um único trecho de código, justamente o método "public void<br />

decimoTerceiro(Date dataAtual)" da classe Funcionário. Caso contrário o desenvolvedor teria que alterar<br />

todas as classes que implementassem o cálculo de décimo terceiro salário.<br />

Observe também que quanto mais abaixo na hierarquia, mais especializado se torna uma classe. A idéia<br />

é que as classes superiores sejam bastante genéricas, permitindo a representação mais abrangente<br />

possível das entidades que inspiraram o projeto dessa classe.<br />

A palavra reservada extends<br />

Em <strong>Java</strong> usamos a palavra reservada extends para definir uma subclasse. Essa palavra traduz a idéia<br />

de que uma classe está estendendo as características e a funcionalidade de sua superclasse. No nosso<br />

exemplo teríamos:<br />

// Essa classe herda todos os atributos e a funcionalidade da classe Funcionario<br />

public class AuxiliarDeLimpeza extends Funcionario<br />

{<br />

public void limpar(Sala aula)<br />

{<br />

// método que limpa uma sala de aula<br />

}<br />

62<br />

Professor<br />

Coordenador<br />

Funcionário<br />

Auxiliar<br />

de limpeza

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!