Sobes.tech
Junior

Quando un metodo è considerato sovrascritto?

sobes.tech AI

Risposta dell'AI

Il metodo è considerato sovrascritto nei seguenti casi:

  1. È dichiarato in una classe figlia.
  2. Ha lo stesso nome del metodo nella classe genitore.
  3. Ha la stessa firma (numero e tipi di parametri) e ordine dei parametri.
  4. Ha un tipo di ritorno compatibile con quello del metodo nella classe genitore (covarianza, se applicabile).
  5. Ha un modificatore di accesso uguale o più ampio rispetto a quello del metodo nella classe genitore (nella maggior parte dei linguaggi orientati agli oggetti).
  6. Il metodo genitore è dichiarato come virtuale, astratto o di interfaccia (nei linguaggi che richiedono di indicare esplicitamente la possibilità di sovrascrittura, ad esempio C# con la parola chiave virtual).

Esempio in Java:

// Classe genitore
class SuperClass {
    // Metodo che può essere sovrascritto
    public void display() {
        System.out.println("Questo è il metodo display di SuperClass.");
    }
}

// Classe figlia
class SubClass extends SuperClass {
    // Metodo sovrascritto display
    @Override // Annotazione per verificare la sovrascrittura in fase di compilazione
    public void display() {
        System.out.println("Questo è il metodo display di SubClass.");
    }
}

Esempio in Python:

# Classe genitore
class SuperClass:
    # Metodo che può essere sovrascritto
    def display(self):
        print("Questo è il metodo display di SuperClass.")

# Classe figlia
class SubClass(SuperClass):
    # Metodo sovrascritto display
    def display(self):
        print("Questo è il metodo display di SubClass.")

Il punto chiave è mantenere il nome e la firma del metodo, ma modificare il suo comportamento nella classe figlia.

Differenza importante con l'overloading:

L'overloading consiste nella dichiarazione di più metodi con lo stesso nome in una classe, ma con firme diverse. L'overriding consiste nella dichiarazione di un metodo in una classe figlia con lo stesso nome e firma di quello nella classe genitore.