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() {
}
}
-
As explicações sobre as classe surgem apenas na página 0501_especialclass ↩
-
Neste caso todos os métodos e atributos serão públicos, num caso real isso não seria uma boa opção ↩