1 / 31

Derivazione tra classi

Derivazione tra classi. Classe D derivata da B. class B { //CLASSE BASE int x; void G() { x = x * 20; } }. class D extends B { //CLASSE DERIVATA void H() { x = x * 10; } }. Principi fondamentali della derivazione – Principio 1.

merlin
Télécharger la présentation

Derivazione tra classi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Derivazione tra classi

  2. Classe D derivata da B class B { //CLASSE BASE int x; void G() { x = x * 20; }} class D extends B {//CLASSE DERIVATA void H() { x = x * 10; }}

  3. Principi fondamentali della derivazione – Principio 1 Tutte le proprietà definite per la classe base vengono implicitamente definite anche nella classe derivata …

  4. Principi fondamentali della derivazione – Principio 1 … cioè vengono ereditate da quest’ultima. Ad esempio la classe D ha il campo dati int x; e la funzione void G();

  5. Principi fondamentali della derivazione – Principio 2 La classe derivata può avere ulteriori proprietà … Ad esempio la classe D ha in più, rispetto alla classe base B, la funzione void H();

  6. Principi fondamentali della derivazione – Principio 3 Ogni oggetto della classe derivata è anche un oggetto della classe base … … cioè si può usare un oggetto della classe derivata in ogni situazione/contesto in cui si può usare un oggetto della classe base

  7. Principi fondamentali della derivazione – Principio 3 static void stampa(B bb) { System.out.println(bb.x);} … D d = new D();d.G(); //OKstampa(d); //OK … la classe Dè compatibilecon la classe B.

  8. Principi fondamentali della derivazione – Principio 4 Non è vero che un oggetto della classe base è anche un oggetto della classe derivata … … non è possibile usare un oggetto della classe base laddove si può usare un oggetto della classe derivata.

  9. Principi fondamentali della derivazione – Principio 4 B b = new B();b.H(); //NO: non ha il campo H()D d = b; //NO:BnonècompatibileconDb = new D(); //OK D è compatibile con B

  10. Gerarchie di classi: in profondità Una classe derivata può fungere da classe base per ulteriori derivazioni … class B {…}class D extends B {…}class E extends D {…}

  11. Gerarchie di classi: in ampiezza Una classe può avere un numero qualsiasi di classi derivate … class B {…}class D extends B {…}class Dbis extends B {…}

  12. C D Dbis E Gerarchie di classi: esempio Ogni classe ha solo una classe base… …no ereditarietà multipla in Java

  13. Casting

  14. Riferimenti di diverse classi possono denotare lo stesso oggetto class B {…}class D extends B { int x_d; }…D d = new D();d.x_d = 10; B b = d; //OK b e d denotano lo stesso ogg.b.x_d = 20; //NO x_d non è un campo di B! //type checking statico

  15. Casting per accedere ai campi della classe derivata class B {…}class D extends B { int x_d; }…D d = new D();d.x_d = 10; B b = d; //OK b e d denotano lo stesso ogg.((D)b).x_d = 20; //OK(D)bèunriferimentoditipoD

  16. Il casting tra classi lungo lo stesso cammino in una gerarchia di derivazione è … … sempre sintatticamente corretto(non vengono mai rivelati errori di compilazione) … … ma è responsabilità del programmatore che sia anche semanticamente corretto…

  17. Esempio class B {…}class D extends B { int x_d; }…B b = new B();D d = (D)b; //OK a tempo di compilazione, ma … //NO a runtime (ClassCastException)d.x_d = 10; //NOTA:x_dnonesistenell’oggetto //denotato da d!

  18. Livello di accesso protected

  19. Una classe D derivata da un’altra classe B, anche se in un package diverso, ha una relazione speciale con quest’ultima… …non è un cliente qualsiasi di B in quanto vogliamo poter usare oggetti di D al posto dei quelli di B… …non coincide con B.

  20. PerquestomotivopuòesserecheB voglia mettere a disposizione di Ddei campi che non sono a disposizione di clienti generici di B …per fare ciò si dicharano detti campiprotected… …garantendo l’accesso ad essi alle classi derivate, ma bloccandone l’accesso ai clienti generici.

  21. Costruttori delle classi derivate

  22. Anche gli oggetti delle classi derivate sono creati chiamando un costruttore… …tale costruttore però deve inizializzare anche i campi dati ereditati… … alcuni dei quali sono inaccessibili dalla classe derivata (es. private)…

  23. …per fare ciò Java richiede di invocare un costruttore della classe base nei costruttori della classe derivata… …mediante il costrutto super()che deve essere la prima istruzione eseguibile del corpo del costruttore della classe derivata.

  24. Esempio EsempioCostuttori1.java

  25. Qualora un costruttore della classe derivata non contiene l’invocazione esplicita di un costruttore … …viene invocato automaticamente il costruttore senza parametri… …se quest’ultimo non è presente viene generato un errore.

  26. Esempio EsempioCostuttori2.java

  27. Se una classe derivata non contiene costruttori … …Java ne fornisce automaticamente un costruttore standard senza parametri… …che invoca il costruttore senza parametri della classe base... …e lascia i campi dati della classe derivata al loro valore di default.

  28. Esempio EsempioCostuttori3.java

  29. Costrutto this() …da utilizzare in modo analogo a super()… …è un’invocazione esplicita ad un altro costruttore della stessa classe… …permette si riusare codice già scritto…

  30. Esempio PersonaThis.java

  31. Principi fondamentali della derivazione Principio 1: la classe derivata eredita le proprietà (campi) della classe base Principio 2: può avere ultriori proprietà Principo 3: ècompatibile con la classe base Principio 4: ma non il viceversa

More Related