|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
|
[Java] Overriding aiuto!
ciao a tutti ! chiedo scusa ma mi dovreste da una mano da amici! ..nel senso che dovete imboccarmi col cucchiaino che le slide del prof sono molto ambigue e internet è superficiale. Si parla di .. OVERRIDING in Java. Il problema del sovraccaricamento. Sulle slide del prof c'e' secritto solo che :
"Una sottoclasse puo' sovrapporre (???) un metodo ereditato e visibile a patto che, rispetto al metodo della superclasse, il nuovo metodo abbia lo stesso nome, tipo di ritorno e lista di argomenti, visibilita' non inferiore." Tutte ste cose io le ho capite ma mi trovo in situazioni che pur verificandosi queste regole cmq c'e' un errore di compilazione. Allora mi chiedo : c'e' altro che dovrei sapere su quest'argomento .. grazie in anticipo a coloro che hanno un po' di pazienza per ris a un inesperto in Java
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Attenzione che l'overriding non è il sovraccaricamento, quello è l'overloading. L'overriding non so come tradurlo, io me l'immagino come una specie di sovrascrittura. Dico specie perché in realtà è sempre possibile richiamare il metodo sovrascritto tramite super.nome_metodo()
Ad ogni modo quello che conta è che una volta che hai "overridato" un metodo questo potrà essere richiamato anche tramite un riferimento più generico (un riferimento con tipo di una superclasse) ti faccio un esempio: Mettiamo che hai la classica classe Persona con un metodo saluta() che stampa "Ciao". Codice:
class Persona{
public void saluta(){
System.out.println("Ciao");
}
}
Codice:
class Giovane extends Persona{
public void saluta(){
System.out.println("Bella!");
}
}
Codice:
class Prova{
public static void main(String[] args){
Persona tizio=new Giovane();
tizio.saluta();
}
}
Spero di averti schiarito un po' le idee... Se hai dubbi chiedi pure, magari posta il codice che non ti funziona |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Ti avevo, in un' altro post, spiegato già da differenza tra override(ridefinizione) e overloading(sovraccarico) accennandoti anche la covarianza del tipo restituito.
1)Override Quello che accade è che in una classe derivata venga ridefinito il corpo del metodo(ovvero quello che fa) lasciando invariata la firma con al piu un elevamento dei provileggi d' accesso. Codice:
public class Base{
public String toString(){return "base";}}
public class Derivata{
@override
public String toString(){return "derivata";}}
Codice:
public class Base{
public String toString(){return "base";}}
public class Derivata{
@override
public String toString(){return "derivata";}
public String toString(String parola){return parola;}}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
|
grazie per le ris.. si effettivamente tempo fa lo chiesi ..ma solo ora mi sto ricordando perche' ho lasciato la programmazione in Java per un bel periodo per problemi vari .. cmq .. ora è tutto un po' piu' chiaro .. pero' vorrei chiedervi ..nel caso in cui si devono gestire delle eccezioni come si comportano l'overriding e l'overloading ? ..
__________________
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Nell' override bisogna fare attenzione all' utilizzo della clausola throws. Infatti non è possibile nelle classi derivate dichiarare (attraverso throws) che un metodo (sovrascritto ovviamente) potrebbe sollevare Exception se le stesse non sono dichiarate nella firma del metodo base. Al contrario è possibile nelle ridefinizioni(classi derivate) eliminare la clausola throws utilizzata nella classe base. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
|
ehm ... nn è che puoi farmi un esempio..cioe' so cosa significa thorws e compagnia bella.. pero' non ho capito bene la tua spiegazione
__________________
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
è possibile fare questo
Codice:
public class Base{
public String metodo() throws Exception{return "base";}}
public class Derivata{
@override
public String metodo() throws Exception{return "derivata";}}
oppure
public class Derivata{
@override
public String metodo(){return "derivata";}}
Non è invece possibile fare ciò: Codice:
public class Base{
public String metodo() {return "base";}}
public class Derivata{
@override
public String metodo() throws Exception{return "derivata";}}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
|
capito ...
__________________
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
In che senso scusa?
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Anche per le sue sottoclassi. Inoltre se vuoi fare l'override di un metodo che lancia una eccezione specifica (ad esempio una IOException) puoi specificare nella clausola throws quella stessa eccezione o una sua superclasse (ad esempio Exception).
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
No non puoi sostituire un Exception specifica (esempio IOException) con una una sua superClasse in quanto in questo modo vai ad aumentare il range delle eccezioni sollevate e la specifica di dice che tale range può essere diminuito o reso vuoto....è consentita la sostituzione, vicerversa, con una sottoclasse.
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Hai ragione, in effetti non avrebbe senso
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
La puoi vedere dualmente al tipo restituito da un metodo:
se devi restituire un Object(che nel caso delle eccezioni rappresenta la base ovvero Exception)..nulla ti vieta di ritornare una Stringa (nel caso delle eccezioni ipotizziamo IOException)....il contrario ovviamente non è valido. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:24.




















