Solo piensa que es como tener un "es-un" o un "tiene-un" relación
En este ejemplo Humano "es-un" animal, y puede hereda diferentes datos de la clase de Animal. Por lo tanto, se utiliza la herencia:
abstract class Animal {
private String name;
public String getName(){
return name;
}
abstract int getLegCount();
}
class Dog extends Animal{
public int getLegCount(){
return 4;
}
}
class Human extends Animal{
public int getLegCount(){
return 2;
}
}
La composición tiene sentido si un objeto es el propietario de otro objeto. Como un objeto humano que posee un objeto Dog. Así, en el siguiente ejemplo un objeto humano "tiene-un" objeto perro
class Dog{
private String name;
}
class Human{
private Dog pet;
}
esperanza de que ayudó ...
>> Si estuviera programando en un lenguaje que permite la creación de subclases sin subtipar, ¿se refiere a la mayoría del lenguaje de scripting? – Howard
Me gusta que el autor de la pregunta muestre que quería recibir la respuesta opuesta a lo que se le preguntó. Nos pidieron que proporcionáramos un ejemplo de contador, donde la herencia sería más apropiada. Sin embargo, debe darse por vencido y aceptar un ejemplo más donde la herencia apesta de nuevo. Esto es un misterio. OOP domina el mundo, sin embargo, su característica principal, la herencia, ¡nunca debe usarse a favor de una buena composición estructural antigua! ¿Podría ser que deberíamos preferir los condicionales sobre el polimorfismo también porque el polimorfismo se logra a través de la (mala) herencia en java? – Val
Puede ser que Java también sea basura porque basándose en elementos como Integer se extiende Número y ByteInputStream extiende InputStream y cada objeto deriva métodos de bloqueo, hash e igualdad del Objeto. Obviamente, si heredar algo es malo, entonces Java está equivocado desde el principio. – Val