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 */
}
}