Estratto del documento

Invocare un metodo della superclasse

Problema di ricorsione nel metodo deposit

Completiamo il metodo: dobbiamo versare una somma e sommarla a balance. Non possiamo modificare BankAccount direttamente balance, che è una variabile privata. L'unico modo per aggiungere una somma di denaro a balance è l'invocazione del metodo deposit.

Così non funziona, perché il metodo diventa ricorsivo:

public class SavingsAccount extends BankAccount {

public void deposit(double amount) {

deposit(amount); // NON FUNZIONA ricorsione infinita!!!

withdraw(FEE);

}

Utilizzo di super per invocare metodi della superclasse

Per invocare il metodo della superclasse anziché il metodo con lo stesso nome (sovrascritto) della classe corrente, si usa super.nomeMetodo(parametri). super è un riferimento all'oggetto parametro implicito del metodo, come il riferimento this, e viene creato al momento dell'invocazione del metodo, analogamente a this.

Tuttavia, super tratta l'oggetto a cui si riferisce come se fosse un esemplare della superclasse: questa è l'unica differenza tra super e this.

Conversioni di tipo tra superclasse e sottoclasse

Un oggetto di tipo SavingsAccount è un caso speciale di oggetti di tipo BankAccount. Una variabile oggetto del tipo di una superclasse può riferirsi a un oggetto di una classe derivata, quindi non c'è nessuna "conversione" effettiva, cioè non vengono modificati i dati.

Esempio di conversione

SavingsAccount collegeFund = new SavingsAccount(10); // creo un oggetto

BankAccount anAccount = collegeFund; // converto l'oggetto in un oggetto BankAccount

Object anObject = collegeFund; // o anche in un oggetto di tipo Object

Conversione implicita e esplicita

La conversione tra riferimento a sottoclasse e riferimento a superclasse può avvenire anche implicitamente (come int e double). Il compilatore sa che il metodo richiede un riferimento di tipo BankAccount, quindi effettua la conversione automaticamente.

BankAccount other = new BankAccount(1000);

SavingsAccount sAcct = new SavingsAccount(10);

other.transfer(500, sAcct);

Conversione esplicita di superclassi in sottoclassi

Per convertire un riferimento a superclasse in un riferimento a sottoclasse serve una conversione esplicita. Se in fase di esecuzione bAcct non punta effettivamente a un oggetto SavingsAccount, l'interprete lancia una ClassCastException.

BankAccount bAcct = sAcct;

SavingsAccount sAcct2 = (SavingsAccount) bAcct;

Anteprima
Vedrai una selezione di 1 pagina su 1
Informatica I - la conversione di tipo tra superclasse e sottoclasse in Java Pag. 1
1 su 1
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher enricopava di informazioni apprese con la frequenza delle lezioni di Informatica 1 e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Padova o del prof Avanzini Federico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community