IS vs HAS en Java
- Relación IS-A en Java
- Relación HAS-A en Java
- Diferencias clave entre la relación IS-A y la relación HAS-A
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn