Em programação orientada a objetos,
construtores são como se fossem métodos, sempre sem retorno e com o mesmo nome da classe, que são executados toda vez que uma classe for instanciada. Não há a necessidade de inserir o termo "void" ao desenvolver o construtor. Construtores podem ser usados para atribuir valores iniciais aos atributos do objeto e também para executar um código pré-determinado. Inclusive, da mesma forma que os métodos, podem receber parâmetros.
Assim, toda vez que "produzirmos" um objeto instanciado da classe ArCondicionado ou da Televisao, podemos fazer com que o atributo "estado" de ambas já iniciem com o valor 1 (ligado), graças aos construtores.
Na página anterior, foi vista a formulação dessas duas classes ArCondicionado e Televisao, que era desta forma:
Classe Televisao
Atributos:
- (inteiro) potencia // em Watts
- (inteiro) voltagem // em Volts
- (string) cor
- (string) marca
- (inteiro) canal
- (booleano) estado // ligado (1) ou desligado (0)
Métodos:
- void ligar()
- void desligar()
- void mudarCanal(x)
Classe ArCondicionado
Atributos:
- (inteiro) potencia // em Watts
- (inteiro) voltagem // em Volts
- (string) cor
- (string) marca
- (inteiro) temperatura // em Celsius
- (booleano) estado // ligado (1) ou desligado (0)
Métodos:
- void ligar()
- void desligar()
- void mudarTemperatura(x)
Perceba que as partes em negrito são comuns às duas classes. Mas imagine se tivéssemos várias classes e que a maioria delas senão todas compartilhassem de métodos e atributos em comuns? Foi aí que desenvolveu-se o conceito de herança: uma classe mãe que trará seu conteúdo às classes filhas. É como se existisse uma classe Eletrodomestico que deu origem às classes Televisao e ArCondicionado.
Eletrodomestico, então, teria em seu conteúdo somente todas as partes destacadas acima em negrito, e Televisao e ArCondicionado incorporariam todo esse conteúdo por meio da chamada herança, e adicionariam novos métodos e novos atributos. Cada classe filha teria suas peculiaridades, mas teriam os atributos e métodos de Eletrodomestico em comum.
As duas classes compartilham os métodos ligar() e desligar(), mas, devido às diferenças entre cada aparelho, com componentes e propósitos de uso distintos, o ato de ligar ou desligar uma televisão é diferente do de ligar ou desligar um ar condicionado, embora a finalidade seja a mesma, que é a de colocar o equipamento em funcionamento ou não.
Em OO, é possível sobrescrever os métodos, ou seja, escrever no código do programa as funcionalidades de ligar() e desligar() na classe Televisao de um jeito e na ArCondicionado de outro jeito. A isso, damos o nome de polimorfismo, que quer dizer "muitas formas".