Muitas pessoas ao iniciarem os estudos em programação orienta-a-objeto se confundem com alguns paradigmas clássicos, ao longo desta página estarei explicando alguns através do Java.
Herança - "Quando uma determinada classe herda atributos de outra".
Mas o que isso que dizer a final?
De modo simplificado, herança é "uma classe (classe filha) que tem os mesmos atributos de uma outra (classe mãe), mais alguns atributos destintos".
Um bom exemplo de herança seria:
Uma classe mãe chamada Automovel e outras filhas; CarrosCorrida, CarrosAntigos e CarrosEsportivos. Ambas as classes filhas podem ser vistas como um automóvel, diferenciando umas das outras por penas por alguns atributos, mas sempre com algo em comum, as duas sempre serão um Automovel.
A pergunta básica para verificar se a relação da classe A com a classe B e uma herança é simples, basta fazer a seguinte pergunta a si mesmo:
"A classe A é uma classe B."
Exemplo:
Um carro antigo é um automóvel? SIM - Logo pode usar Herança.
Uma casa é um automóvel? NÃO - Logo não se pode usar Herança.
Composição - "Composição acontece quando uma classe está contida em outra".
A composição é bem mais simples de entender que a herança, na composição sempre se usa a seguinte pergunta:
A classe A está tem a classe B.
Exemplo:
Neste exemplo livro e autor são duas classes distintas;
Um livro tem autor? - SIM - Logo se usa a composição.
Um automóvel tem carro antigo? - NÃO - Logo não se usa a composição
Um automóvel tem porta ? - SIM - Logo pode se usar a composição.