IS vs HAS en Java

Rupam Yadav 12 octubre 2023
  1. Relación IS-A en Java
  2. Relación HAS-A en Java
  3. Diferencias clave entre la relación IS-A y la relación HAS-A
IS vs HAS en Java

Una de las características clave del uso de un lenguaje de programación orientado a objetos es que podemos reutilizar un código varias veces. Generalmente, podemos usar dos conceptos, Herencia y Composición, para lograr la reutilización.

La herencia es una relación IS-A y la composición es una relación HAS-A. Ambos conceptos difieren de cierta manera pero tienen el mismo objetivo, la reutilización.

Veamos la diferencia entre estos dos conceptos a continuación.

Relación IS-A en Java

Una herencia o la relación IS-A en Java se refiere a la relación de dos o más clases. La herencia se puede lograr utilizando la palabra clave extends en Java. Podemos heredar una clase principal para usar sus métodos y variables en una clase secundaria.

En el código de muestra a continuación, tenemos dos clases, Animal y Dog, la clase Animal tiene una función whatAmI() que devuelve una cadena, mientras que la clase Dog extiende la clase Animal Que es un concepto de herencia.

Este Dog es una relación Animal. La clase Dog ahora puede acceder al método whatAmI() desde su clase padre.

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());
  }
}

Producción :

I am a Dog class and I belong to Animal class

Relación HAS-A en Java

A diferencia de la herencia, la relación Composición o HAS-A no utiliza ninguna palabra clave como extends. Creamos un objeto de la clase padre o cualquier clase que queramos usar en este método.

En el siguiente ejemplo, nuevamente, tenemos dos clases, Legs y Dog.

Legs tiene un método howManyLegs(). En la clase Dog, creamos un objeto de la clase Legs y usamos ese objeto para llamar a la función howManyLegs().

Ahora, aquí podemos ver que se está aplicando el concepto de Composición, Dog TIENE-A Legs o clase Dog TIENE-A propiedad de Legs.

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());
  }
}

Producción :

I am a Dog class and I have four legs

Diferencias clave entre la relación IS-A y la relación HAS-A

IS-A HAS-A
Es un concepto de herencia Es un concepto de Composición
Una clase no puede extenderse a más de una clase. Una clase puede tener una relación HAS-A con muchas otras clases
Una clase final no se puede extender en herencia. Podemos reutilizar las clases finales en Composición.
La herencia es un enlace estático y no se puede cambiar en tiempo de ejecución La composición es un enlace dinámico y es flexible para los cambios.
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