• Non ci sono risultati.

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 1 U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a

N/A
N/A
Protected

Academic year: 2021

Condividi "F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 1 U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a"

Copied!
10
0
0

Testo completo

(1)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 1 U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a

F ac o lt à d i I ng e gn e ri a

C O R S O D I

F O NDA M E N T I D I I N F O R M A T ICA L ingu a gg io Java : E re d it a ri e

Ing . F ra n c o Z a m bon e lli

Lu c id i rea li zz a ti i n c o ll a bo ra z ion e c on Ing . E n ri c o D e n ti - U n iv . B o logn a

A nno A cca d e m ic o 1999 /2000

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 2 A GG IO RNA M E N T O / M O D IF ICA D E I R E Q U IS IT I

Sp ess o si i n co n tr a n o p ro b le m i ch e r ic h ie d o n o cl a ss i simili a cl a ss i g es is te n ti, m a n o n id en ti ch e.

C o m e fa re p er n o n ri fa re tu tt o d a ca p o? • ric op ia re m anu alm en te il cod ice d ell a c la ss e e si st en te e ca m b ia re qu el ch e v a ca m b ia to → s i ha una p ro lif er a zi on e d i fil e… e po i è tu tt o m anua le ! • cr ea re un a nuov a c la ss e c h e c on te ng a a l suo in te rno un ogg ett o d ell a c la ss e p ree si st en te → i ca m p i da ti p ri va ti p er ò non sono d ir ett a m en te m an ipo lab ili b is ogna ri sc ri ve re an ch e i m et od i ch e "r im angono ugua li "

E S E M P IO : d a un Counter b a se a l C o un ter c o n d ecre m en to

class Counter2 { Counter c; public Counter2() {c = new Counter(); } public Counter2(int v) {c = new Counter(v);} public void inc() { c.inc(); } public int rd() { return c.rd(); } public void dec() { c.val--; } }

• il ca m po d ati c.val è acce ss ib il e p er ch é ha vi sili b it à pa ck ag e e la c la ss e Counter2 è d ef in it a n ell o st ess o p ac k ag e d i Counter • è c o m unqu e n ece ss ar io ris cr iv er e 4 m et od i su 5 so lo p er ada t- ta rli a ll a nuo va cl a ss e, m a d i fa tt o ri sc ri ve ndo li ugua li , se n za agg iung er e nuo ve fun zi ona lit à s p rec o d i t em po e d i ri so rs e! O cc o rre p o ter r iu sa re le c la ss i es is te n ti i n m o d o p fle ss ib il e.

(2)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 3 E R E D IT AR IE T À

• S i vuo le riu sa re tu tt o ci ò ch e può ess er e riu sa to • non è u til e n é oppo rtuno m od if ica re c od ice g ià fun zi on an te e co rr ett o • il cu i sv il uppo h a ric h ie st o te m po (a nn i- uo m o ) e d en ar o

O cc o rre d is p o rre n el li n g u agg io d i un m o d o p er p rog ett a re a ll e d iff er en ze , p ro ce d end o in cr em en ta lm en tenon ri pa rti re da ze ro qu ando se rv e un a nuov a c la ss e, m a po te rl a d ef in ir e a pa rti re da un a g es is te n te

B is ogn er à d ir e: • co sa la nuov a c la ss e h a in p r is p ett o all a p rece d en te • si a in te rmi n i d i da ti , si a in te rmi n i d i op er a zi on i.

E S E M P IO : d a un Counter b a se a l C o un ter c o n d ecre m en to

class Counter2 extends Counter { public void dec() { val--; } }

• la c la ss e Counter2 ere d it a tu tt i i m et o d i e i ca m p i d a ti d i

Counter , e può u sa rli co m e fo ss er o d ef in iti l o ca lm en te (s em p re c h e la vi si b ilit à lo p er m ett a ) • in p , agg iung e d ati e m et od i suo i sp ec ifi ci ( in qu es to es em p io , n ess un d at o , so lo un m et odo , dec )

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA UNA NU O VA R EL A Z IO N E F RA C L A SS I

F ino ra , l’ un ica re laz ion e in tr odo tt a e ra l’ is tan zi a zi on e: • ogn i ogg ett o è is tan za d i un a ce rta cl ass e • re laz ion e fr a un ogg ett o (d a un la to ) e una cl a ss e (d all ’a lt ro )

ERE D IT AR IE T À = un a nu o va re la zi o n e fr a cl a ss i

un a cl a ss e B ERE D IT A D A un a (p ree si st en te ) cl a ss e A

cl a ss e b a se ( o su p er cl a ss e) è la c la ss e da cu i s i er ed it a (A ) cl a ss e d er iva ta (o so tt o cl a ss e) è la c la ss e ch e er ed it a (B )

B A

er ed it a_da

(3)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 5 L A C L A SS E D E R IVA T A P U O ’:agg iun g ere nu ov i ca m p i d a ti e nu ov i m et o d i a qu elli er ed it ati d all a c la ss e- b as e • ri d ef in ire a lc un i d ei m et o d i e re d it ati d all a c la ss e- b as e

L A C L A SS E D E R IVA T A N O N P U O ’:eli m in a re c a m p i d a ti o m et o d i (c o m po rta m en to m ono tono , si acc re sce se m p re )

V IS IB IL IT A

N ell a cl a ss e- b a se : • ci ò ch e è p ri va to è v is ib il e so lo a i m et od i d ell a cl a ss e st ess a • ci ò ch e è d i pa ck ag e è v is ib il e so lo a i m et od i d ell e c la ss i d ell o st ess o pa ck ag e • ci ò ch e è pubb li co è vi si b il e a tu tti

P erc , la cl a ss e d er iva ta :n o n p u ò ve d er e la pa rt e p ri va ta d ell a cl a ss e- ba se , a ppun to p er ch é p riv at a; • p u ò ve d er e la pa rt e d i pa ckag e d ell a cl a ss e- ba se , pu rc h é la nuov a c la ss e si a d ef in it a n ell o st ess o p ac k ag e • ve d e, o vv ia m en te , la pa rt e p u bb li ca d ell a cl a ss e- ba se , i n qu an to v is ib il e a tu tti .

B a st er à ?

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 6 M E M BR I P R O T E TT I

R ic on si d er ia m o il p rob le m a p rece d en te d i d ef in ir e Counter2 (do ta to d i d ec re m en to ) a p ar ti re d a Counter (c h e n e è p rivo ).

P er r ea li zza re l'op er az ion e d i d ec re m en to , è n ece ss ar io : • o d is po rr e d ell ’acce ss o d ir ett o al ca m po val ; • o sfr u tt ar e, se e si st e, un m et odo (pubb li co o d i p ac k ag e) ch e con se n ta d i in iz ia li zz a re il ca m po va l con un v al o re a p iace re .

N el no st ro ca so , ce l' a bb ia m o fa tt a so lo p er ch é val n o n er a p ri va to ( av ev a v is ib ilit à p ac k ag e) e p er ch é Counter2 è st a ta po st a n ell o st ess o pa ckag e d i Counter ( qu ell o d i d ef au lt ),

E se val f o ss e st a to p ri va to?

E se n o n fo ss e st a to p o ss ib il e c o ll o ca re Counter2 n ell o st ess o p a ck ag e d i Counter ?

P er sf ru tt a re d avv er o l’ ere d it a ri et à o cc o rr e su p er a re la ri g id it à d ei t re li v elli d i v is ib ilit à p riv at o / pubb li co / p ac k ag e:

o cc o rr e un a vi si b ilit à sp ec if ic a p er le c la ss i d er iv a teprotected

U n ca m p o d a ti o un m et o d o protected :è v is ib il e a ll e c la ss i d er iva te in d ip en d en te m en te da l pa ckag e in cu i ess e so n o d ef in it ep er il re st o si co m p o rt a co m e la v is ib ili pa ckag e.

(4)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 7 V IS IB IL IT A ' IN J A V A : R IA SS UN T O

C la ss e d i V is ib ili

A cce ss ib il e da pub li c p ro tec te d pa ck ag e p ri va te

S te ss a C la ss e sì sì sì sì

C la ss e (o S o tt o cl ass e) n ell o st ess o p ac k ag e sì sì sì no S o tt o cl ass e in p ac k ag e d iff er en te sì sì no no

N on so tt o cl ass e, p ac k ag e d iff er en te sì no no no

UNA R IF LE SS IO N E

L a qu a li fic a protected : • re nd e v is ib il e un att ribu to a tu tt e le so tt o cl a ss i d i qu ell a c la ss e, p re se n ti e fu tu re • p er ci ò , co stit u is ce un p er m ess o d i a cce ss o ind is cr im ina to , v ali do p er ogn i po ss ib il e so tt o cl a ss e c h e po ss a in fu tu ro ess er e d efi n it a , se n za po ss ib ilit à d i d is ti n zi on e.

O cc o rr e dunqu e v al u ta re c on att en zi on e qu ando ci ò si a oppo rtuno .

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 8 C O M P A T IB IL IT À F RA C L A SS I

U n Counter2 h a si cu ra m en te tu tt i i m ed o ti e g li a tt ri bu ti d i d i Counter

⇓⇓ • og n i Counter2 è a n ch e un Counter , ovv er o : • ogn i ogg ett o d i cl ass e Counter2 è im p li cit a m en te a n ch e d i cl ass e Counter • m a n o n v ice v er sa , p er ch é Counter2 è p ri cc o d i

Counter (s a fa re c o se c h e un Counter non sa fa re , e può av er e d ai ca m p i d ati i n es is te n ti i n Counter ) ⇓

L a so tt o cl a ss e è un so tt o ti po d ell a su p er cl a ss e

C on se gu en ze su l p ia no se m an ti co : • l’ er ed it ar ie tà non è so lt an to un m odo p er ri u sa re c od ice in d u ce un a cl a si fic a zi o n e fr a le e n tit à d el “m ondo ” • ad er en za a l m o n do re a le d i qu es ta “c la ss if icaz ion e” … ?

P E RC IÒ : • un Counter2 pu ò “ p re n d er e il po st o d i un Counter s en za ch e g li a lt ri co m po n en ti se n e a cc o rga n om a n o n il co n tr a ri o

(5)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 9 ESE M P IO

• U n a so tt o cl ass e d elimit a in qu al ch e m odo un so tt o in si em e d ell a sup er cl ass e. I C oun te r2 sono un so tt o in si em e d ei C oun te r in qu an to n e h anno tu tt e le ca ra tt er is ti ch e, e h anno al cun e ca ra tt er is ti ch e p ar ti co la ri. • L a c la ss e d eg li st ud en ti è un so tt o in si em e d ell a c la ss e p iú g en er al e d ell e p er son e. P er ci ó , qu ando p ar li am o d i uno p er son a, in g en er al e, qu es ta p er son a puó tr anqu ill am en te e ss er e uno st ud en te . In fa tti , uno st ud en te è a n ch e un a p er son a. • A n al og am en te , qu ando u si am o un r if er im en to a un ogg ett o d i un a ce rta c la ss e, po ss ia m o tr anqu ill am en te soppo rta re il fa tt o ch e qu es to rif er im en to pun ti a un ogg ett o d ell a so tt o cl ass e. • N on è v er o il con tr ar io : qu ando p ar li am o d i st ud en ti , non po ss ia m o p en sa re c h e l’ ogg ett o d el no st ro d is co rs o d iv en ti un a p er son a c h e st ud en te non é.

class Esempio1 { Counter c1 = new C ounter(3); Counter2 c2 = new Counter2(); c2.dec(); // OK: dec() esiste in Counter2 // c1.dec(); // NO: dec() non c’è in Counter c1=c2; // OK: un Counter2 è anche un Counter // c2=c1; // NO: c1 è un semplice Counter } so tti n si em e d ei Counter2 in si em e d ei Counter

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 10 E R E D IT AR IE T À e C O S T RU T T O R I

R ic on si d er ia m o un m o m en to la d ef in iz ion e d i Counter2 :

class Counter2 extends Counter { public void dec() { val--; } }

A bb ia m o u sa to un ogg ett o se n za d ef in ir n e il co st ru tt o re ! C o m e è po ss ib ili e?? • Ja v a non obb li ga a d ef in ir e a lm eno un co st ru tt o re p er ogn i cl ass e, an ch e se c iò è fo rt em en te ra cc o m anda to • in ass en za d i co st ru tt o ri d ef in iti es p li cit am en te , Ja v a d ef in is ce a u to m ati ca m en te un co st ru tt o re d i d ef au lt • il co st ru tt o re d i d ef au lt non fa nu ll a d i sp ec ifi co , s al vo ch ia m a re il co st ru tt o re d i d ef a u lt d ell a sup erc la ss e

class Counter2 extends Counter { public void dec() { val--; } // il costruttore di default generato da Java // public Counter2() { super(); } }

L ’e sp re ss ion e super() invo ca il co st ru tt o re d i d ef au lt d ell a cl ass e- b as e: se e ss o non es is te si h a e rr o re .

(6)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 11 E R E D IT AR IE T À e C O S T RU T T O R I

C o n il m ecc a n is m o d ell a ere d it a ri et á si ere d it a n o :tu tti i ca m p i da ti (a n ch e qu elli p ri va te a c u i l a c la ss e d er iv at a non po tr à acce d er e d ir ett am en te ) • tu tti i m et od i ( an ch e qu elli p ri va te c h e la c la ss e d er iv at a non po tr à u sa re d ir ett am en te ) tr a nn e i co st ru tt o ri P E RC H É ? • P er ch é i co st ru tt o ri non svo lgono fun zi on i, m a in iz ia li zza no un ’is ta n za d ell a c la ss e s ono sp ec if ic i d i qu ell a p a rt ic o la re c la ss e • co st ru ir e un Counter non è la st ess a c o sa c h e c o st ru ir e un

Counter2 ( un Counter2 in g en er al e h a p iù ca m p i d ati )

C iò non si gn if ica c h e la c la ss e d er iv at a non abb ia un co st ru tt o re , in qu an to , co m e v ed re m o , n e v ie n e g en er at o uno d i d ef au lt .

Q u in d i… ..

P er co st ru ir e un ogg ett o d i un a c la ss e d er iv at a, è se m p re n ece s- sa ri o ch ia m ar e un co st ru tt o re d ell a c la ss e- b as e, in qu an to : • so lo il co st ru tt o re d ell a c la ss e b as e può sa p er e c o m e in iz ia - li zza re i ca m p i- d ati er ed it ati d a ta le c la ss e in m odo co rr ett o • è il so lo m odo p er g ar an ti re l’ in iz ia li zzaz ion e d i ca m p i- d ati p riv ati (a c u i l a so tt o cl ass e non può acce d er e d ir ett am en te ) • si ev it a un a inu til e dup li caz ion e d i cod ice n ell a so tt o cl ass e.

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 12 Q u a le c o st ru tt o re d ell a cl a ss e- ba se v ie n e c h ia m a to? • il co st ru tt o re d i d ef au lt d ef in it o d a Ja v a (s e no i non lo d ef in ia m o ) ch ia m a il co st ru tt o re d i d ef au lt d ell a c la ss e b as e (s e qu es to non es is te si h a e rr o re ) • p er i co st ru tt o ri d ef in iti d all ’u te n te o cc o rr e sp ec ifi ca re e sp li ci - ta m en te qu al e c o st ru tt o re d ell a c la ss e b as e v ad a c h ia m at o , m ed ia n te la no taz ion e super(…..) , ch e d ev ’e ss er e la p ri m a is tr u zi on e d el co rpo d el co st ru tt o re .

S e qu es ta m an ca , Ja v a in se ris ce a u to m ati ca m en te un a c h ia m at a al co st ru tt o re d i d ef au lt d ell a c la ss e b as e ( super() ), a m eno ch e non ci si a g ià un a c h ia m at a a un alt ro co st ru tt o re d ell a st ess a cl ass e m ed ia n te la no taz ion e this() .

E S E M P IO

class Counter2 extends Counter { public void dec() { val--; } // il costruttore di default generato da Java // public Counter2() { super(); } public Counter2(int x) { super(x); } }

L ’e sp re ss ion e super(x) invo ca il co st ru tt o re c on un ar go m en to d ell a c la ss e- b as e (s e e ss o non es is te si h a e rr o re ).

(7)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 13 s up e r vs . th is

R ia ss u m endo : • this è un rif er im en to all ’is ta n za c o rr en te • super è un rif er im en to all a c la ss e b as e

S ono es p re ss ion i l ec it e: • this.val ch e ind ica il ca m po val d ell a c la ss e d ell ’is ta n za co rr en te • this.f() ch e ric h ia m a il m et odo f() d ell a c la ss e d ell ’is ta n za co rr en te • this(…) ch e ric h ia m a un alt ro co st ru tt o re d ell a st ess a c la ss e

• super(…) ch e ric h ia m a un co st ru tt o re d ell a c la ss e b as e • super.val ch e ind ica il ca m po val d ell a c la ss e b as e • super.f() ch e ric h ia m a il m et odo f() d ell a c la ss e b as e

L e u ltim e du e no taz ion i sono u tili se la so tt o cl ass e d ef in is ce un ca m po d ati o un m et odo o m on im o con uno d ell a c la ss e b as e.

E S E M P IO (r ic o rd a: Counter d ef in is ce un ca m po val )

class DualCounter extends Counter {

double val;

// val indica ora il campo val di DualCounter // mentre super.val indica il val di Counter

public void inc() { super.inc(); val++; }

// inc() indica il metodo inc() di DualCounter // super.inc() chiama l’inc() di Counter }

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 14 C O S T RU T T O R I N O N P UBB L IC I

C o m e si è g ià v is to , in ass en za d i co st ru tt o ri d ef in iti d all ’u te n te , Ja v a d ef in is ce se m p re un co st ru tt o re d i d ef au lt p er ogn i cl ass e: ta le c o st ru tt o re è pubb li co , in m odo d a c on se n ti re a ll a c la ss e d i ess er e no rm alm en te is ta n zi at a. T al e c on st ru tt o re o non fa n ie n te o , se la c la ss e è d er iv at a, invo ca il co st ru tt o re d ell a sup er cl ass e.

In al cun e c ir co st an te tu tt av ia si può d es id er ar e d i im p ed ir e c h e una cl a ss e po ss a ess er e is tan zi a ta da ch iunqu e: i n p ar ti co la re , può ess er e n ece ss ar io : • im p ed ir e qu al unqu e is ta n zi az ion e • con se n ti re so lo is ta n zi az ion i d a p ar te d i so tt o cl ass i

N el p rim o ca so , l’ u te n te d ev e d ef in ir e un co st ru tt o re p ri va to , n el sec ondo un co st ru tt o re p ro te tt o ,

In qu es to m odo , si p re v ie n e la g en er az ion e d el co st ru tt o re pubb li co au to m ati co d a p ar te d i Ja v a.

C L A SS I F INA L I ( final )

C o m e si è g ià v is to , un a v ar ia b il e d ic h ia ra ta final d iv en ta un a co st an te , o ss ia non è p iù m od if ica b il e.

A ll o st ess o m odo , un a cl a ss e d ic h ia ra ta final d iv en ta un a cl a ss e fin a le , d a cu i n o n è p o ss ib il e d er iva re so tt o cl a ss i.

(8)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 15 ESE M P IO : PE R S O N E E S T UD E N T I

/** * la classe Persona @author Enrico Denti @version 1.0, 13/4/98 */

class Persona { String nome; int anni;

Persona() { nome = "sconosciuto"; anni = 0; } Persona(String n) { nome = n; anni = 0; } Persona(String n, int a) { nome=n; anni=a; }

void print(){ System.out.print("Il mio nome e' " + nome); System.out.println(" e ho " + anni + " anni"); } }

/** * la classe Studente che eredita da Persona @author Enrico Denti @version 1.0, 13/4/98 */

class Studente extends Persona { int matr; Studente() { super() ; matr = 9; } Studente(String n) { super(n) ; matr = 8; } Studente(String n, int a) { super(n,a) ; matr=7;} Studente(String n, int a, int m) { super(n,a) ; matr=m; } void print(){ super.print(); System.out.println("Matricola = " + matr); } }

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 16 PE R S O N E E S T UD E N T I (se gu e )

public class Esempio2 {

public static void main(String args[]){

Studente studente; studente = new Studente(); studente.print();

studente = new Studente("Anna"); studente.print();

studente = new Studente("Tom", 30); studente.print();

studente = new Studente("Laura", 20, 1234); studente.print(); } }

NO T A : • S ebb en e e si st a un m et odo print() s ia in Persona c h e in

Studente , v ie n e u sa to qu ell o d i qu es t’ u ltim o in qu an to p iù sp ec if ic o .

(9)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 17 C O M P A T IB IL IT A D I T IP O

C o m e si è v is to , se la c la ss e B è so tt o cl ass e d all a c la ss e A : • ogn i ogg ett o d i cl ass e B è a n ch e d i cl ass e A (non v ice v er sa ) • e dunqu e la c la ss e B è un so tt o ti po d ell a c la ss e A

C iò im p li ca un a co m p a tib ili d a so tt o tip o a tip o (non v ice v er- sa ), d a c u i se gu e la po ss ib ilit à d i u sa re un ogg ett o d ell a cl a ss e d er iva ta a l po st o d i un o d ell a cl a ss e- b a se ( non v ice v er sa ).

E S E M P IO

class Esempio3 { Persona p = new Persona(“John”); Studente s = new Studente(“Tom”); p.p rint(); // stampa solo il nome s.print(); // stampa nome e matricola

p=s;

p.print(); // COSA STAMPA ??? }

L ’a ss egn am en to p=s : • è p o ss ib il e, p er ch é ogn i Studente è a n ch e un a Persona • e n o n co m p o rt a p er d it e d i i n fo rm a zi o n e, p er ch é si t ra tt a d i un ass egn am en to fr a rif er im en ti ( non fr a v ar ia b ili !)

Q u es to p o n e un p ro b le m a : • p è d ef in it o c o m e rif er im en to a un a g en er ica Persona • m a fa ri fer im en to in re a lt à a un o Studente , ch e è a lt ra c o sa !

M a a ll o ra … . co m e ve rr à in te rp re ta to ad ess o p ?

C o m e se m p li ce Persona o co m e Studente ?

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 18 P O L IM O R F IS M O

U na fun zi on e si d ice P O L IM O RFA s e è c apa ce d i op er a re su ogg etti d i ti po d ive rs o sp ec ia li zz a n do il su o co m po rt a m en to in ba se a l ti po d ell ’ogg ett o su cu i op er a

I li ngu agg i a ogg etti h anno in tr in sec o il po lim o rf is m o , in qu an to po ss ono es is te re – in cl ass i d iv er se – fun zi on i con lo st ess o no m e m a c on eff etti co m p le ta m en te d iv er si .

P O L IM O RF IS M O O R IZZ ON T A L E

E S E M P IO

public class Esempio2 {

public static void main(String args[]){

Studente s = new Studente(“Anna”);

Point p = new Point();

p.print(); // METODO PRINT DI Point

s.print(); // METODO PRINT DI Studente } }

O vv io e n at u ra le … ..

M A A TT E N Z ION E : qu ando le c la ss i sono le g at e d a e re d ia rie tà po ss ono cr ea rs i d ei p rob le mi d i po lim o rf is m o p iù co m p le ss i. In fa tti , si con si d er i l a po ss ib ilit à d i u sa re un ogg ett o d ell a c la ss e d er iv at a a l po st o d i uno d ell a c la ss e b as e. S e e n tr am b e le c la ss i fo rn is cono lo st ess o m et odo , qu al e d ei du e d ev e v en ir e v ie n e invo ca to ?

(10)

F ran co Z a m bon elli , E n ri co D en ti - ERE D IT AR IE T À E P O L IM O RF IS M O IN JAVA 19 P O L IM O R F IS M O VE R T ICA L E

public class Esempio2 {

public static void main(String args[]){

Persona p = new Studente (“Anna”);

p.print(); // METODO PRINT DI PERSONA O DI

// STUDENTE ?

} }

• se p re v al e il ti po fo rm a le d el rif er im en to ( Persona n ell ’e se m p io p rece d en te ) si p ar la d i LE GA M E S T A T IC O • se p re v al e il ti po eff etti vo d ell ’is tan za co rr en te ( Studente

n ell ’e se m p io p rece d en te ) si p ar la d i LE GA M E D INA M IC O

In Java p rev a le il ti po eff etti vo d ell ’is ta n za co rr en te →→ LE G A M E D INA M IC O (L A TE B IND IN G )

E S E M P IO

public class Esempio2 {

public static void main(String args[]){

Persona p = new Studente (“Anna”);

p.print(); // STAMPA NOME E MATRICOLA !!

} }

S ebb en e p s ia un rif er im en to a Persona , po ic h é l’ is ta n za c o rr en te è uno Studente v ie n e ric h ia m at o il m et odo print() d ell a c la ss e

Studente . • In C ++ si av re bb e un co m po rta m en to d iv er so , p er ch é v err ebb e ch ia m at o il m et odo d ell a c la ss e Persona (a m eno d i u sa re un a sp ec if ica no taz ion e)

Riferimenti

Documenti correlati

MINISTERO DELLA SALUTE - SISTEMA INFORMATIVO SANITARIO REGIONE030ASL /AO3112013 Assistenzasanitariacollettivainambientedivitaedi lavoro 20801 --assistenza programmata a

Le informazioni contenute nella scheda dati di sicurezza, basate sullo stato di conoscenze attuale, hanno il compito di descrivere il prodotto dal punto di

raggiungere la definitività della sentenza, non sembrerebbe inopportuno, forse, rivisitare l'intero sistema delle impugnazioni, ad es. introducendo un filtro per la declaratoria

"Come questo Consiglio ha affermato nella risoluzione del 1 dicembre 1994, adottata con il consenso di quasi tutti i suoi componenti e sotto la Presidenza e con il contributo

processi in corso e sulla organizzazione giudiziaria, con particolare riferimento alla fase di transizione organizzativa prevista dalla normativa di riforma sul Giudice unico e

«Con nota del 12 giugno 1998 il Ministro di Grazia e Giustizia trasmetteva al Consiglio Superiore della Magistratura la propria circolare, di pari data, emanata per rafforzare

29COMUNE DI MONTEBELLUNACORSO MAZZINI, 118MONTEBELLUNATV5 30COMUNE DI MONTEGROTTO TERMEVIA ROMA, 1MONTEGROTTO TERMEPD5; 6 31CONCERIA PRIANTE SPAVIA QUINTA STRADA, 1ARZIGNANOVI

SRLVIA PIAVE, 4-AVOLPAGO DEL MONTELLOTV€ 0,00 506OMT BONETTO SRLVIA FORNACE, 5 PRIMA STRADASAN GIORGIO DELLE PERTICHEPD€ 0,00 507OFFICINA COLLAUDI E MANUTENZIONI DI DEDGJONAJ