Junior
Cosa sono l'ereditarietà e il polimorfismo nei tipi di dati di riferimento?
sobes.tech AI
Risposta dell'AI
L'eredità è un meccanismo che consente a una nuova classe (sottoclasse/figlia) di ereditare proprietà (campi) e comportamenti (metodi) di una classe esistente (superclasse/genitore), estendendo o sovrascrivendo le funzionalità. Ciò favorisce il riutilizzo del codice e stabilisce relazioni di "è un" (is-a).
Il polimorfismo è la capacità di oggetti di diverse classi di rispondere in modo diverso a uno stesso nome di metodo, a seconda del loro tipo specifico durante l'esecuzione. Fornisce flessibilità ed estensibilità al codice, permettendo di trattare oggetti di sottoclassi tramite un riferimento alla superclasse.
In tipi di dati di riferimento (classi), questi concetti giocano un ruolo chiave:
- Eredità: La sottoclasse ha accesso ai membri della superclasse e può aggiungere i propri o modificare il comportamento dei metodi ereditati (override). Un oggetto di sottoclasse può essere usato ovunque ci si aspetti un oggetto di superclasse.
- Polimorfismo: Diversi oggetti appartenenti a una stessa gerarchia di ereditarietà possono essere trattati con lo stesso codice, chiamando lo stesso metodo, ma l'implementazione di tale metodo sarà specifica per il tipo di oggetto durante l'esecuzione.
Esempio in Java:
// Superclasse (classe genitore)
class Animal {
public void makeSound() {
System.out.println("Emette un suono");
}
}
// Sottoclasse (figlia), eredita da Animal
class Dog extends Animal {
// Sovrascrive il metodo della superclasse
@Override
public void makeSound() {
System.out.println("Bau!");
}
}
// Sottoclasse (figlia), eredita da Animal
class Cat extends Animal {
// Sovrascrive il metodo della superclasse
@Override
public void makeSound() {
System.out.println("Miao!");
}
}
// Esempio di polimorfismo
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // oggetto della superclasse
Animal myDog = new Dog(); // oggetto della sottoclasse, riferimento alla superclasse
Animal myCat = new Cat(); // oggetto della sottoclasse, riferimento alla superclasse
myAnimal.makeSound(); // Stampa: Emette un suono
myDog.makeSound(); // Stampa: Bau! (polimorfismo - metodo di Dog)
myCat.makeSound(); // Stampa: Miao! (polimorfismo - metodo di Cat)
}
}