Sobes.tech
Junior

Qual è la differenza tra ereditarietà e polimorfismo?

sobes.tech AI

Risposta dell'AI

L'eredità è un meccanismo che consente a una classe (sottoclasse, classe derivata) di ereditare campi e metodi di un'altra classe (superclasse, classe base). Ciò favorisce il riutilizzo del codice.

Il polimorfismo è la capacità di usare un'interfaccia comune per rappresentare diverse forme di base. Nel contesto di Java, ciò significa che una variabile di tipo riferimento può riferirsi a un oggetto del suo stesso tipo o a un oggetto di uno dei suoi sottotipi. Si distinguono il polimorfismo in fase di compilazione (overloading dei metodi) e in fase di esecuzione (override dei metodi).

La principale differenza:

  • Eredità definisce relazioni tra classi (genitore-figlio) e permette di riutilizzare il codice.
  • Polimorfismo permette di accedere a diversi oggetti tramite un'interfaccia comune, eseguendo il metodo corrispondente in base al tipo effettivo dell'oggetto durante l'esecuzione.

Esempio di polimorfismo in fase di esecuzione:

class Animal {
    public void sound() {
        System.out.println("L'animale emette un suono");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("bau-bau");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("miao-miao");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Polimorfismo: variabile di tipo Animal che fa riferimento a un oggetto Dog
        Animal myCat = new Cat(); // Polimorfismo: variabile di tipo Animal che fa riferimento a un oggetto Cat

        myDog.sound(); // Chiama il metodo sound() della classe Dog
        myCat.sound(); // Chiama il metodo sound() della classe Cat
    }
}