Sobes.tech
Junior

Cosa sono l'ereditarietà e il polimorfismo nei tipi di dati di riferimento?

sobes.tech AI

Risposta dell'AI

L'ereditarietà è un meccanismo che consente a una classe (classe figlia, classe derivata) di ereditare proprietà e comportamenti di un'altra classe (classe base, classe genitore). Ciò favorisce il riutilizzo del codice e la creazione di gerarchie di classi.

Il polimorfismo è la capacità di oggetti di classi diverse di rispondere in modo diverso allo stesso messaggio (chiamata di metodo), a seconda del loro tipo concreto. Nel contesto dell'ereditarietà, ciò si manifesta spesso attraverso la sovrascrittura dei metodi della classe base nella classe derivata.

Esempio (Java):

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

// Classe derivata
class Dog extends Animal {
    @Override // Sovrascrittura del metodo
    public void makeSound() {
        System.out.println(" Bau!");
    }
}

// Classe derivata
class Cat extends Animal {
    @Override // Sovrascrittura del metodo
    public void makeSound() {
        System.out.println("Miao!");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Oggetto Dog, ma riferimento di tipo Animal
        Animal myCat = new Cat(); // Oggetto Cat, ma riferimento di tipo Animal

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

In questo esempio:

  • Ereditarietà: Le classi Dog e Cat ereditano da Animal.
  • Polimorfismo: Le variabili myDog e myCat fanno riferimento a oggetti Dog e Cat rispettivamente, anche se hanno tipo Animal. Quando si chiama makeSound(), viene eseguito il metodo dell'oggetto, non quello del tipo di riferimento.