Nessun titolo diapositiva - PowerPoint PPT Presentation

About This Presentation
Title:

Nessun titolo diapositiva

Description:

Title: Nessun titolo diapositiva Author: ui o Last modified by: Giuseppe De Giacomo Created Date: 11/10/2000 9:55:47 AM Document presentation format – PowerPoint PPT presentation

Number of Views:49
Avg rating:3.0/5.0
Slides: 32
Provided by: uio3
Category:

less

Transcript and Presenter's Notes

Title: Nessun titolo diapositiva


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 questultima.
  • 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 è compatibile con 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 B non è compatibile con Db
    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
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 è un riferimento di tipo D

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_d
    non esiste nelloggetto //denotato da d!

18
Livello di accesso protected
19
  • Una classe D derivata da unaltra classe B, anche
    se in un package diverso, ha una relazione
    speciale con questultima
  • 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
  • Per questo motivo può essere che B voglia mettere
    a disposizione di D dei campi che non sono a
    disposizione di clienti generici di B
  • per fare ciò si dicharano detti campi protected
  • garantendo laccesso ad essi alle classi
    derivate, ma bloccandone laccesso 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 linvocazione esplicita di un
costruttore
  • viene invocato automaticamente il costruttore
    senza parametri
  • se questultimo 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()
  • è uninvocazione 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
Write a Comment
User Comments (0)
About PowerShow.com