Ir para o conteúdo

Herança

A herança, tal como na vida real, é o processo pelo qual os objectos ganham algumas das características dos seus pais. Embora, tal como na vida real, uma classe deva sempre introduzir comportamento e características próprias, através do mecanismo de herança é possível criar relações entre diferentes classes e reutilizar código. É um mecanismo muito importante em linguagens POO.

Como exemplo podemos pensar numa bicicleta. Se criarmos a classe Bicicleta e definirmos um conjunto base de atributos (cor, tamanhoRoda, tipoTravao) e um conjunto de métodos para o comportamento (travar, pedalar) podemos achar que estes atributos e métodos se aplicam a vários tipos de bicicleta. Uma bicicleta de montanha (BicicletaMontanha) terá os mesmos atributos, podendo acrescentar um novo (tipoSuspensao), e os mesmos métodos, acrescentando também o seu método novo (mudarMudanca). Estas duas bicicletas partilham código.

Se não usarmos herança termos de criar duas classes e implementar na classe Bicicleta os três atributos e os dois métodos, e na classe BicicletaMontanha termos de implementar, novamente, os três atributos mais o atributo novo e os dois métodos, além do método novo. Ora isto para o exemplo até poderia ser rápido mas o exemplo peca pela sua simplicidade, num sistema real a quantidade de objectos e código que se pode repetir é tanta que justifica podermos juntar tudo isto numa relação de herança.

Assim, o que fazemos é criar a classe Bicicleta, definir os três atributos e os dois métodos, e na classe BicicletaMontanha indicar que esta classe herda da anterior. Neste caso, na classe BicicletaMontanha, apenas nos resta implementar um atributo e um método1.

Transformando em código2:

public class Bicicleta {

    public String cor;
    public int tamanhoRoda;
    public String tipoTravao;

    public void travar() {
    }

    public void pedalar() {
    }
}

public class BicicletaMontanha extends Bicicleta {

    public tipoSuspensao;

    public void mudarMudanca() {
    }
}

  1. As explicações sobre as classe surgem apenas na página 0501_especialclass 

  2. Neste caso todos os métodos e atributos serão públicos, num caso real isso não seria uma boa opção