Sobes.tech
Middle

Cosa sono l'ereditarietà e il polimorfismo nel contesto dei tipi di dati di riferimento?

sobes.tech AI

Risposta dell'AI

L'eredità è un meccanismo che consente di creare una nuova classe (derivata, figlia), che eredita campi e metodi di una classe esistente (base, genitore). Ciò favorisce il riutilizzo del codice e la creazione di gerarchie di classi.

Il polimorfismo è la capacità di oggetti di classi diverse di comportarsi in modo uniforme o di avere comportamenti diversi quando si invoca lo stesso metodo. Si distinguono due tipi principali: statico (overloading dei metodi) e dinamico (override dei metodi).

Nel contesto dei tipi di dati di riferimento, l'eredità permette di creare una variabile della classe base che può riferirsi a un oggetto della classe derivata. In questo caso, il polimorfismo si manifesta nel fatto che, chiamando un metodo tramite questa variabile, verrà eseguita la versione del metodo del tipo reale dell'oggetto, non del tipo di riferimento (polimorfismo dinamico).

Esempio in Java:

// Classe base
class Animal {
    public void makeSound() {
        System.out.println("Emette un suono");
    }
}

// Classe derivata 1
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bau bau");
    }
}

// Classe derivata 2
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Miao miao");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Variabile di tipo Animal che si riferisce a un oggetto Dog
        Animal myCat = new Cat(); // Variabile di tipo Animal che si riferisce a un oggetto Cat

        myDog.makeSound(); // Chiama il metodo di Dog (polimorfismo)
        myCat.makeSound(); // Chiama il metodo di Cat (polimorfismo)
    }
}

In questo esempio, myDog e myCat hanno tipo di riferimento Animal, ma grazie al polimorfismo, chiamando makeSound(), viene eseguita l'implementazione corrispondente di Dog e Cat.