É um vs TEM um em Java

Rupam Yadav 12 outubro 2023
  1. Relacionamento IS-A em Java
  2. Relacionamento HAS-A em Java
  3. Principais diferenças entre o relacionamento IS-A e o relacionamento HAS-A
É um vs TEM um em Java

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 Yadav avatar Rupam Yadav avatar

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