In caso di overriding viene sempre eseguito il metodo della classe a cui appartiene l' oggetto.
Io, sapendo che esiste già ma per puro esercizio, ho provato a fare una classe Lista che non contiene campi se non gli elementi successivi della lista.
Poi una classe Array (che per essere precisi non è un array, ma una lista di interi, solo che non sapevo come chiamarla) che eredita dalla classe Lista e aggiunge i campi elem corrispondenti ai valori interi dei singoli elementi della lista.
Così si è facilitati perchè la classe Lista contiene già metodi per aggiungere elementi, se ad esempio voglio aggiungere un elemento a un oggetto di tipo Array, mi basta chiamare il metodo aggiungi della superclasse Lista, e poi aggiungere anche il singolo elemento al nuovo elemento che ho aggiunto.
Il problema è che non capisco, in caso di overriding, come sia possibile chiamare il metodo aggiungi della superclasse Lista.
Allora qui ho il codice della classe Lista:
codice:
/** Realizzazione di una lista senza campi
 *  I campi andranno poi aggiunti in caso si erediti da questa classe
 */
public class Lista
{
    private Lista prox;
    public Lista()
    {
        prox=this;
    }
    public Lista primo()
    {
        return prox;
    }
    public Lista ultimo()
    {
        Lista ptr;
        ptr=prox;
        while(ptr!=this)
            ptr=ptr.prox;
        return ptr;
    }
    public boolean cancella(Lista elem) /** elem è l' elemento da cancellare */
    {
        boolean result=false;
        Lista ptr,prev;
        ptr=this.prox;
        prev=this;
        while(ptr!=this && result==false)
        {
            if(ptr==elem)
                result=true;
            else
            {
                prev=ptr;
                ptr=ptr.prox;
            }
        }
        if(result==true)
        {
            prev.prox=ptr.prox;
        }
        return result;
    }
    public boolean aggiungi(Lista elem) /** elem è l' elemento dopo il quale va aggiunto il nuovo elemento */
    {
        boolean result=false;
        Lista ptr,temp;
        ptr=this.prox;
        while(ptr!=this && result==false)
        {
            if(ptr==elem)
                result=true;
            else
                ptr=ptr.prox;
        }
        if(result==true)
        {
            temp=ptr.prox;
            ptr.prox=new Lista();
            ptr=ptr.prox;
            ptr.prox=temp;
        }
        return result;
    }
}
Qui invece ho il codice (incompleto) della classe Array:
codice:
public class Array extends Lista
{
    private int elem;
    public boolean aggiungi(Lista elem, int valore)
    {
        boolean result=false;
        /* Qui dovrei chiamare il metodo aggiungi della superclasse Lista */
    }
}