É um vs TEM um em Java
- Relacionamento IS-A em Java
- Relacionamento HAS-A em Java
- Principais diferenças entre o relacionamento IS-A e o relacionamento HAS-A
 
Um dos principais recursos do uso de uma linguagem de programação orientada a objetos é que podemos reutilizar um código várias vezes. Geralmente, podemos usar dois conceitos, Herança e Composição, para alcançar a capacidade de reutilização.
Herança é um relacionamento IS-A e Composição é um relacionamento HAS-A. Ambos os conceitos diferem de uma certa maneira, mas têm o mesmo objetivo, a reutilização.
Vamos ver a diferença entre esses dois conceitos a seguir.
Relacionamento IS-A em Java
Uma herança ou relacionamento IS-A em Java refere-se ao relacionamento de duas ou mais classes. A herança pode ser obtida utilizando a palavra-chave extends em Java. Podemos herdar uma classe pai para usar seus métodos e variáveis em uma classe filha.
No código de exemplo abaixo, temos duas classes, Animal e Cachorro, a classe Animal tem uma função whatAmI() que retorna uma String, enquanto a classe Cachorro estende a classe Animal Que é um conceito de Herança.
Este Cachorro é uma relação Animal. A classe Dog agora pode acessar o método whatAmI() de sua classe pai.
class Animal {
  public String whatAmI() {
    return "I belong to Animal class";
  }
}
class Dog extends Animal {
  public void aboutMe() {
    System.out.println("I am a Dog class and " + whatAmI());
  }
}
Resultado:
I am a Dog class and I belong to Animal class
Relacionamento HAS-A em Java
Ao contrário da herança, a composição ou a relação HAS-A não usa nenhuma palavra-chave como estende. Criamos um objeto da classe pai ou de qualquer classe que desejamos usar neste método.
No exemplo a seguir, novamente, temos duas classes, Pernas e Cachorro.
Legs tem um método howManyLegs(). Na classe Dog, criamos um objeto da classe Legs e usamos esse objeto para chamar a função howManyLegs().
Agora, aqui podemos ver que está a ser aplicado o conceito de Composição, a classe Cachorro HAS-A Pernas ou a classe Cachorro HAS-A propriedade de Pernas.
class Legs {
  public String howManyLegs() {
    return "I have four legs";
  }
}
class Dog {
  Legs legs = new Legs();
  public void aboutMe() {
    System.out.println("I am a Dog class and " + legs.howManyLegs());
  }
}
Resultado:
I am a Dog class and I have four legs
Principais diferenças entre o relacionamento IS-A e o relacionamento HAS-A
| É UM | TEM UM | 
|---|---|
| É um conceito de herança | É um conceito de composição | 
| Uma classe não pode estender mais de uma classe. | Uma classe pode ter relacionamento HAS-A com várias outras classes | 
| Uma classe final não pode ser estendida em herança | Podemos reutilizar classes finais em Composição | 
| A herança é uma ligação estática e não pode ser alterada em tempo de execução | A composição é uma ligação dinâmica e flexível para mudanças | 
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn