Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
4
respuestas

[Duda] ¿Por qué Gato no puede heredar de Perro?

Buen día.

Hasta el momento había entendido que Una clase puede heredar de otra aunque esta última herede de otra.

En otras palabras, entendí que puede existir las clases Animal, Perro y Gato; donde Perro puede heredar de Animal y Gato puede heredar de Perro, ahora me confunde el hecho que el ejercicio diga que Gato no puede heredar de Perro.

Lo vi en una de las explicaciones donde existían Cuenta, CuentaCorriente y CuentaCorrientePersonaFisica, donde CuentaCorriente hereda de Cuenta y CuentaCorrientePersonaFisica hereda de CuentaCorriente.

O entendí mal y lo que quieren decir en el ejercicio es que Gato no puede heredar de Animal y Perro a la vez, en este caso corrijo lo expresado anteriormente.

¡Gracias por su atención!

4 respuestas

Aquí por la misma razón.

Yo entendi lo mismo que tu, lo que entiendo es que el error esta en que perro y gato heredan de animal, pero tal como explicas, gato puede heredar de perro y, por lo tanto, heredar de animal.

solución!

Hola Wilmar, la razón por la cual la clase Gato no puede heredar de la clase Perro se basa en los principios de la herencia en programación orientada a objetos y la lógica de la jerarquía de clases. Aquí hay algunos puntos clave:

  1. Relación Lógica Herencia: La herencia se utiliza para modelar una relación "es un". Un Gato no es un tipo de Perro; son dos tipos diferentes de Animal. Por lo tanto, no tiene sentido que Gato herede de Perro.
  2. Polimorfismo Cuando se utiliza la herencia, se espera que las subclases (como Gato y Perro) compartan comportamientos y características de la clase padre (Animal). Si Gato hereda de Perro, se esperaría que un Gato tenga las características y comportamientos de un Perro, lo cual es incorrecto.
  3. Diseño de Clases En un diseño de clases bien estructurado, las clases deben ser coherentes y representar correctamente las relaciones entre los objetos. La herencia incorrecta puede llevar a confusión y a un diseño de software deficiente.

Ejemplo:

// Clase base class Animal { public void hacerSonido() { System.out.println("El animal hace un sonido"); } }

// Subclase Perro que hereda de Animal class Perro extends Animal { @Override public void hacerSonido() { System.out.println("Guau"); } }

// Subclase Gato que hereda de Animal class Gato extends Animal { @Override public void hacerSonido() { System.out.println("Miau"); } }

// Clase principal para probar la herencia public class Main { public static void main(String[] args) { Animal miPerro = new Perro(); Animal miGato = new Gato();

    miPerro.hacerSonido(); // Salida: Guau
    miGato.hacerSonido();  // Salida: Miau
}

} Aquí tienes un ejemplo en Java que ilustra la relación de herencia entre las clases Animal, Perro y Gato:

// Clase base
class Animal {
    public void hacerSonido() {
        System.out.println("El animal hace un sonido");
    }
}

// Subclase Perro que hereda de Animal
class Perro extends Animal {
    @Override
    public void hacerSonido() {
        System.out.println("Guau");
    }
}

// Subclase Gato que hereda de Animal
class Gato extends Animal {
    @Override
    public void hacerSonido() {
        System.out.println("Miau");
    }
}

// Clase principal para probar la herencia
public class Main {
    public static void main(String[] args) {
        Animal miPerro = new Perro();
        Animal miGato = new Gato();

        miPerro.hacerSonido(); // Salida: Guau
        miGato.hacerSonido();  // Salida: Miau
    }
}

Explicación del Código

  1. Clase Animal: Es la clase base que define un método hacerSonido().
  2. Clase Perro: Hereda de Animal y sobrescribe el método hacerSonido() para proporcionar su propio comportamiento.
  3. Clase Gato: También hereda de Animal y sobrescribe el método hacerSonido() de manera similar.
  4. Clase Main: Se utiliza para crear instancias de Perro y Gato, y llamar a su método hacerSonido(), demostrando así el polimorfismo.

Este diseño asegura que tanto Perro como Gato son tipos de Animal, pero no uno del otro, lo que es coherente con la lógica de herencia en programación orientada a objetos.

Hola compañeros. gracias a sus comentarios entendí mejor la herencia de clases. También me confundió el ejercicio. Pero ya entendí: La clase Gato no puede heredar de la clase Perro por que ya está heredando de la clase animal y sólo puede heredar de una clase.

Y así lo dice la explicación: "ya está heredando de Animal, no puede heredar también características de Perro".

Es decir, Gato podría heredar de Perro, pero sólo si no estuviera heredando de Animal. O sea que tal como está escrito el código que nos dan, no puede.

Ahora, sí podría, quitando la herencia de la clase Animal, pero como dice Eduin, no sería coherente, no podríamos decir Gato "es un" Perro.

En todo caso podría ser que la clase Mamífero herede de la clase Animal y la clases Gato y Perro hereden de la clase Mamífero. Así sería coherente.

Pero ésa es la razón de que no pueda heredar. Espero haber ayudado.