É 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