chapter10 polymorphism

of 62/62
Object-Oriented Object-Oriented Programming: Programming: Polymorphism Polymorphism Chapter 10 Chapter 10

Post on 30-Nov-2014

97 views

Category:

Data & Analytics

1 download

Embed Size (px)

DESCRIPTION

edfrfwerfrfefergerfefrwrrwrwete

TRANSCRIPT

  • 1. OObbjjeecctt--OOrriieenntteedd PPrrooggrraammmmiinngg:: PPoollyymmoorrpphhiissmm CChhaapptteerr 1100
  • 2. WWhhaatt YYoouu WWiillll LLeeaarrnn 2 WWhhaatt iiss ppoollyymmoorrpphhiissmm?? HHooww ttoo ddeeccllaarree aanndd uussee vviirrttuuaall ffuunnccttiioonnss ffoorr aabbssttrraacctt ccllaasssseess
  • 3. PPrroobblleemm wwiitthh SSuubbccllaasssseess Given the class hierarchy below Consider the existence of a draw function for each subclass Consider also an array of references to the superclass (which can also point to various objects of the subclasses) How do you specify which draw statement to be called when using the references Rectangle 3 Shape class hierarchy Circle Triangle Right Triangle Isosceles Triangle Square Shape
  • 4. 4 IInnttrroodduuccttiioonn PPoollyymmoorrpphhiissmm EEnnaabblleess pprrooggrraammmmiinngg iinn tthhee ggeenneerraall TThhee ssaammee iinnvvooccaattiioonn ccaann pprroodduuccee mmaannyy ffoorrmmss ooff rreessuullttss IInntteerrffaacceess IImmpplleemmeenntteedd bbyy ccllaasssseess ttoo aassssiiggnn ccoommmmoonn ffuunnccttiioonnaalliittyy ttoo ppoossssiibbllyy uunnrreellaatteedd ccllaasssseess
  • 5. 5 PPoollyymmoorrpphhiissmm WWhheenn aa pprrooggrraamm iinnvvookkeess aa mmeetthhoodd tthhrroouugghh aa ssuuppeerrccllaassss vvaarriiaabbllee,, tthhee ccoorrrreecctt ssuubbccllaassss vveerrssiioonn ooff tthhee mmeetthhoodd iiss ccaalllleedd,, bbaasseedd oonn tthhee ttyyppee ooff tthhee rreeffeerreennccee ssttoorreedd iinn tthhee ssuuppeerrccllaassss vvaarriiaabbllee TThhee ssaammee mmeetthhoodd nnaammee aanndd ssiiggnnaattuurree ccaann ccaauussee ddiiffffeerreenntt aaccttiioonnss ttoo ooccccuurr,, ddeeppeennddiinngg oonn tthhee ttyyppee ooff oobbjjeecctt oonn wwhhiicchh tthhee mmeetthhoodd iiss iinnvvookkeedd
  • 6. 6 PPoollyymmoorrpphhiissmm PPoollyymmoorrpphhiissmm eennaabblleess pprrooggrraammmmeerrss ttoo ddeeaall iinn ggeenneerraalliittiieess aanndd lleett tthhee eexxeeccuuttiioonn--ttiimmee eennvviirroonnmmeenntt hhaannddllee tthhee ssppeecciiffiiccss.. PPrrooggrraammmmeerrss ccaann ccoommmmaanndd oobbjjeeccttss ttoo bbeehhaavvee iinn mmaannnneerrss aapppprroopprriiaattee ttoo tthhoossee oobbjjeeccttss,, wwiitthhoouutt kknnoowwiinngg tthhee ttyyppeess ooff tthhee oobbjjeeccttss ((aass lloonngg aass tthhee oobbjjeeccttss bbeelloonngg ttoo tthhee ssaammee iinnhheerriittaannccee hhiieerraarrcchhyy))..
  • 7. PPoollyymmoorrpphhiissmm PPrroommootteess 7 EExxtteennssiibbiilliittyy SSooffttwwaarree tthhaatt iinnvvookkeess ppoollyymmoorrpphhiicc bbeehhaavviioorr iinnddeeppeennddeenntt ooff tthhee oobbjjeecctt ttyyppeess ttoo wwhhiicchh mmeessssaaggeess aarree sseenntt.. NNeeww oobbjjeecctt ttyyppeess tthhaatt ccaann rreessppoonndd ttoo eexxiissttiinngg mmeetthhoodd ccaallllss ccaann bbee iinnccoorrppoorraatteedd iinnttoo aa ssyysstteemm wwiitthhoouutt rreeqquuiirriinngg mmooddiiffiiccaattiioonn ooff tthhee bbaassee ssyysstteemm.. OOnnllyy cclliieenntt ccooddee tthhaatt iinnssttaannttiiaatteess nneeww oobbjjeeccttss mmuusstt bbee mmooddiiffiieedd ttoo aaccccoommmmooddaattee nneeww ttyyppeess..
  • 8. Demonstrating PPoollyymmoorrpphhiicc 8 BBeehhaavviioorr AA ssuuppeerrccllaassss rreeffeerreennccee ccaann bbee aaiimmeedd aatt aa ssuubbccllaassss oobbjjeecctt aa ssuubbccllaassss oobbjjeecctt iiss--aa ssuuppeerrccllaassss oobbjjeecctt tthhee ttyyppee ooff tthhee aaccttuuaall rreeffeerreenncceedd oobbjjeecctt,, nnoott tthhee ttyyppee ooff tthhee rreeffeerreennccee,, ddeetteerrmmiinneess wwhhiicchh mmeetthhoodd iiss ccaalllleedd AA ssuubbccllaassss rreeffeerreennccee ccaann bbee aaiimmeedd aatt aa ssuuppeerrccllaassss oobbjjeecctt oonnllyy iiff tthhee oobbjjeecctt iiss ddoowwnnccaasstteedd VViieeww eexxaammppllee,, FFiigguurree 1100..11
  • 9. 9 PPoollyymmoorrpphhiissmm PPrroommootteess eexxtteennssiibbiilliittyy NNeeww oobbjjeeccttss ttyyppeess ccaann rreessppoonndd ttoo eexxiissttiinngg mmeetthhoodd ccaallllss CCaann bbee iinnccoorrppoorraatteedd iinnttoo aa ssyysstteemm wwiitthhoouutt mmooddiiffyyiinngg bbaassee ssyysstteemm OOnnllyy cclliieenntt ccooddee tthhaatt iinnssttaannttiiaatteess tthhee nneeww oobbjjeeccttss mmuusstt bbee mmooddiiffiieedd TToo aaccccoommmmooddaattee nneeww ttyyppeess
  • 10. AAbbssttrraacctt CCllaasssseess aanndd MMeetthhooddss 10 AAbbssttrraacctt ccllaasssseess AArree ssuuppeerrccllaasssseess ((ccaalllleedd aabbssttrraacctt ssuuppeerrccllaasssseess)) CCaannnnoott bbee iinnssttaannttiiaatteedd IInnccoommpplleettee ssuubbccllaasssseess ffiillll iinn ""mmiissssiinngg ppiieecceess"" CCoonnccrreettee ccllaasssseess CCaann bbee iinnssttaannttiiaatteedd IImmpplleemmeenntt eevveerryy mmeetthhoodd tthheeyy ddeeccllaarree PPrroovviiddee ssppeecciiffiiccss
  • 11. AAbbssttrraacctt CCllaasssseess aanndd MMeetthhooddss PPuurrppoossee ooff aann aabbssttrraacctt ccllaassss DDeeccllaarree ccoommmmoonn aattttrriibbuutteess DDeeccllaarree ccoommmmoonn bbeehhaavviioorrss ooff ccllaasssseess iinn aa ccllaassss hhiieerraarrcchhyy CCoonnttaaiinnss oonnee oorr mmoorree aabbssttrraacctt mmeetthhooddss 11 SSuubbccllaasssseess mmuusstt oovveerrrriiddee IInnssttaannccee vvaarriiaabblleess,, ccoonnccrreettee mmeetthhooddss ooff aabbssttrraacctt ccllaassss ssuubbjjeecctt ttoo nnoorrmmaall rruulleess ooff iinnhheerriittaannccee
  • 12. AAbbssttrraacctt CCllaasssseess CCllaasssseess tthhaatt aarree ttoooo ggeenneerraall ttoo ccrreeaattee rreeaall oobbjjeeccttss UUsseedd oonnllyy aass aabbssttrraacctt ssuuppeerrccllaasssseess ffoorr ccoonnccrreettee ssuubbccllaasssseess aanndd ttoo ddeeccllaarree rreeffeerreennccee vvaarriiaabblleess MMaannyy iinnhheerriittaannccee hhiieerraarrcchhiieess hhaavvee aabbssttrraacctt ssuuppeerrccllaasssseess ooccccuuppyyiinngg tthhee ttoopp ffeeww lleevveellss 12
  • 13. KKeeyywwoorrdd aabbssttrraacctt UUssee ttoo ddeeccllaarree aa ccllaassss aabbssttrraacctt AAllssoo uussee ttoo ddeeccllaarree aa mmeetthhoodd aabbssttrraacctt AAbbssttrraacctt ccllaasssseess nnoorrmmaallllyy ccoonnttaaiinn oonnee oorr mmoorree aabbssttrraacctt mmeetthhooddss AAllll ccoonnccrreettee ssuubbccllaasssseess mmuusstt oovveerrrriiddee aallll iinnhheerriitteedd aabbssttrraacctt mmeetthhooddss 13
  • 14. Abstract CCllaasssseess aanndd MMeetthhooddss 14 IItteerraattoorr ccllaassss TTrraavveerrsseess aallll tthhee oobbjjeeccttss iinn aa ccoolllleeccttiioonn,, ssuucchh aass aann aarrrraayy OOfftteenn uusseedd iinn ppoollyymmoorrpphhiicc pprrooggrraammmmiinngg ttoo ttrraavveerrssee aa ccoolllleeccttiioonn tthhaatt ccoonnttaaiinnss rreeffeerreenncceess ttoo oobbjjeeccttss ffrroomm vvaarriioouuss lleevveellss ooff aa hhiieerraarrcchhyy
  • 15. AAbbssttrraacctt CCllaasssseess DDeeccllaarreess ccoommmmoonn aattttrriibbuutteess aanndd bbeehhaavviioorrss ooff tthhee vvaarriioouuss ccllaasssseess iinn aa ccllaassss hhiieerraarrcchhyy.. TTyyppiiccaallllyy ccoonnttaaiinnss oonnee oorr mmoorree aabbssttrraacctt mmeetthhooddss SSuubbccllaasssseess mmuusstt oovveerrrriiddee iiff tthhee ssuubbccllaasssseess aarree ttoo bbee ccoonnccrreettee.. IInnssttaannccee vvaarriiaabblleess aanndd ccoonnccrreettee mmeetthhooddss ooff aann aabbssttrraacctt ccllaassss ssuubbjjeecctt ttoo tthhee nnoorrmmaall rruulleess ooff iinnhheerriittaannccee.. 15
  • 16. BBeewwaarree!! CCoommppiillee TTiimmee EErrrroorrss AAtttteemmppttiinngg ttoo iinnssttaannttiiaattee aann oobbjjeecctt ooff aann aabbssttrraacctt ccllaassss FFaaiilluurree ttoo iimmpplleemmeenntt aa ssuuppeerrccllaassssss aabbssttrraacctt mmeetthhooddss iinn aa ssuubbccllaassss uunnlleessss tthhee ssuubbccllaassss iiss aallssoo ddeeccllaarreedd aabbssttrraacctt.. 16
  • 17. Creating AAbbssttrraacctt SSuuppeerrccllaassss 17 EEmmppllooyyeeee aabbssttrraacctt ssuuppeerrccllaassss EEmmppllooyyeeee,, FFiigguurree 1100..44 eeaarrnniinnggss iiss ddeeccllaarreedd aabbssttrraacctt NNoo iimmpplleemmeennttaattiioonn ccaann bbee ggiivveenn ffoorr eeaarrnniinnggss iinn tthhee EEmmppllooyyeeee aabbssttrraacctt ccllaassss AAnn aarrrraayy ooff EEmmppllooyyeeee vvaarriiaabblleess wwiillll ssttoorree rreeffeerreenncceess ttoo ssuubbccllaassss oobbjjeeccttss eeaarrnniinnggss mmeetthhoodd ccaallllss ffrroomm tthheessee vvaarriiaabblleess wwiillll ccaallll tthhee aapppprroopprriiaattee vveerrssiioonn ooff tthhee eeaarrnniinnggss mmeetthhoodd
  • 18. EExxaammppllee BBaasseedd oonn EEmmppllooyyeeee 18 AAbbssttrraacctt CClalassss Concrete Classes Concrete Classes CClilcickk oonn CClalasssseess ttoo sseeee ssoouurrccee ccooddee
  • 19. Polymorphic iinntteerrffaaccee ffoorr tthhee EEmmppllooyyeeee hhiieerraarrcchhyy ccllaasssseess.. 19
  • 20. NNoottee iinn EExxaammppllee HHiieerraarrcchhyy 20 DDyynnaammiicc bbiinnddiinngg AAllssoo kknnoowwnn aass llaattee bbiinnddiinngg CCaallllss ttoo oovveerrrriiddddeenn mmeetthhooddss aarree rreessoollvveedd aatt eexxeeccuuttiioonn ttiimmee,, bbaasseedd oonn tthhee ttyyppee ooff oobbjjeecctt rreeffeerreenncceedd iinnssttaanncceeooff ooppeerraattoorr DDeetteerrmmiinneess wwhheetthheerr aann oobbjjeecctt iiss aann iinnssttaannccee ooff aa cceerrttaaiinn ttyyppee
  • 21. HHooww DDoo TThheeyy DDoo TThhaatt?? 21 HHooww ddooeess iitt wwoorrkk?? AAcccceessss aa ddeerriivveedd oobbjjeecctt vviiaa bbaassee ccllaassss ppooiinntteerr IInnvvookkee aann aabbssttrraacctt mmeetthhoodd AAtt rruunn ttiimmee tthhee ccoorrrreecctt vveerrssiioonn ooff tthhee mmeetthhoodd iiss uusseedd DDeessiiggnn ooff tthhee VV--TTaabbllee NNoottee ddeessccrriippttiioonn ffrroomm CC++++
  • 22. NNoottee iinn EExxaammppllee HHiieerraarrcchhyy 22 DDoowwnnccaassttiinngg CCoonnvveerrtt aa rreeffeerreennccee ttoo aa ssuuppeerrccllaassss ttoo aa rreeffeerreennccee ttoo aa ssuubbccllaassss AAlllloowweedd oonnllyy iiff tthhee oobbjjeecctt hhaass aann iiss--aa rreellaattiioonnsshhiipp wwiitthh tthhee ssuubbccllaassss ggeettCCllaassss mmeetthhoodd IInnhheerriitteedd ffrroomm OObbjjeecctt RReettuurrnnss aann oobbjjeecctt ooff ttyyppee CCllaassss ggeettNNaammee mmeetthhoodd ooff ccllaassss CCllaassss RReettuurrnnss tthhee ccllaassssss nnaammee
  • 23. SSuuppeerrccllaassss AAnndd SSuubbccllaassss 23 AAssssiiggnnmmeenntt RRuulleess AAssssiiggnniinngg aa ssuuppeerrccllaassss rreeffeerreennccee ttoo ssuuppeerrccllaassss vvaarriiaabbllee ssttrraaiigghhttffoorrwwaarrdd SSuubbccllaassss rreeffeerreennccee ttoo ssuubbccllaassss vvaarriiaabbllee ssttrraaiigghhttffoorrwwaarrdd SSuubbccllaassss rreeffeerreennccee ttoo ssuuppeerrccllaassss vvaarriiaabbllee ssaaffee bbeeccaauussee ooff iiss--aa rreellaattiioonnsshhiipp RReeffeerrrriinngg ttoo ssuubbccllaassss--oonnllyy mmeemmbbeerrss tthhrroouugghh ssuuppeerrccllaassss vvaarriiaabblleess aa ccoommppiillaattiioonn eerrrroorr SSuuppeerrccllaassss rreeffeerreennccee ttoo aa ssuubbccllaassss vvaarriiaabbllee aa ccoommppiillaattiioonn eerrrroorr DDoowwnnccaassttiinngg ccaann ggeett aarroouunndd tthhiiss eerrrroorr
  • 24. ffiinnaall MMeetthhooddss aanndd CCllaasssseess 24 ffiinnaall mmeetthhooddss CCaannnnoott bbee oovveerrrriiddddeenn iinn aa ssuubbccllaassss pprriivvaattee aanndd ssttaattiicc mmeetthhooddss iimmpplliicciittllyy ffiinnaall ffiinnaall mmeetthhooddss aarree rreessoollvveedd aatt ccoommppiillee ttiimmee,, tthhiiss iiss kknnoowwnn aass ssttaattiicc bbiinnddiinngg CCoommppiilleerrss ccaann ooppttiimmiizzee bbyy iinnlliinniinngg tthhee ccooddee ffiinnaall ccllaasssseess CCaannnnoott bbee eexxtteennddeedd bbyy aa ssuubbccllaassss AAllll mmeetthhooddss iinn aa ffiinnaall ccllaassss iimmpplliicciittllyy ffiinnaall
  • 25. WWhhyy UUssee IInntteerrffaacceess JJaavvaa hhaass ssiinnggllee iinnhheerriittaannccee,, oonnllyy TThhiiss mmeeaannss tthhaatt aa cchhiilldd ccllaassss iinnhheerriittss ffrroomm oonnllyy oonnee ppaarreenntt ccllaassss SSoommeettiimmeess mmuullttiippllee iinnhheerriittaannccee wwoouulldd bbee ccoonnvveenniieenntt IInntteerrffaacceess ggiivvee JJaavvaa ssoommee ooff tthhee aaddvvaannttaaggeess ooff mmuullttiippllee iinnhheerriittaannccee wwiitthhoouutt iinnccuurrrriinngg tthhee ddiissaaddvvaannttaaggeess 25
  • 26. WWhhyy UUssee IInntteerrffaacceess PPrroovviiddee ccaappaabbiilliittyy ffoorr uunnrreellaatteedd ccllaasssseess ttoo iimmpplleemmeenntt aa sseett ooff ccoommmmoonn mmeetthhooddss DDeeffiinnee aanndd ssttaannddaarrddiizzee wwaayyss ppeeooppllee aanndd ssyysstteemmss ccaann iinntteerraacctt IInntteerrffaaccee ssppeecciiffiieess wwhhaatt ooppeerraattiioonnss mmuusstt bbee ppeerrmmiitttteedd DDooeess nnoott ssppeecciiffyy hhooww ppeerrffoorrmmeedd 26
  • 27. WWhhaatt iiss aann IInntteerrffaaccee?? AAnn iinntteerrffaaccee iiss aa ccoolllleeccttiioonn ooff ccoonnssttaannttss aanndd mmeetthhoodd ddeeccllaarraattiioonnss AAnn iinntteerrffaaccee ddeessccrriibbeess aa sseett ooff mmeetthhooddss tthhaatt ccaann bbee ccaalllleedd oonn aann oobbjjeecctt TThhee mmeetthhoodd ddeeccllaarraattiioonnss ddoo nnoott iinncclluuddee aann iimmpplleemmeennttaattiioonn 27 tthheerree iiss nnoo mmeetthhoodd bbooddyy
  • 28. WWhhaatt iiss aann IInntteerrffaaccee?? AA cchhiilldd ccllaassss tthhaatt eexxtteennddss aa ppaarreenntt ccllaassss ccaann aallssoo iimmpplleemmeenntt aann iinntteerrffaaccee ttoo ggaaiinn ssoommee aaddddiittiioonnaall bbeehhaavviioorr IImmpplleemmeennttiinngg aann iinntteerrffaaccee iiss aa pprroommiissee ttoo iinncclluuddee tthhee ssppeecciiffiieedd mmeetthhoodd((ss)) AA mmeetthhoodd iinn aann iinntteerrffaaccee ccaannnnoott bbee mmaaddee pprriivvaattee 28
  • 29. WWhheenn AA CCllaassss DDeeffiinniittiioonn IImmpplleemmeennttss AAnn IInntteerrffaaccee:: IItt mmuusstt iimmpplleemmeenntt eeaacchh mmeetthhoodd iinn tthhee iinntteerrffaaccee EEaacchh mmeetthhoodd mmuusstt bbee ppuubblliicc ((eevveenn tthhoouugghh tthhee iinntteerrffaaccee mmiigghhtt nnoott ssaayy ssoo)) CCoonnssttaannttss ffrroomm tthhee iinntteerrffaaccee ccaann bbee uusseedd aass iiff tthheeyy hhaadd bbeeeenn ddeeffiinneedd iinn tthhee ccllaassss ((TThheeyy sshhoouulldd nnoott bbee rree--ddeeffiinneedd iinn tthhee ccllaassss)) 29
  • 30. Declaring CCoonnssttaannttss wwiitthh IInntteerrffaacceess IInntteerrffaacceess ccaann bbee uusseedd ttoo ddeeccllaarree ccoonnssttaannttss uusseedd iinn mmaannyy ccllaassss ddeeccllaarraattiioonnss TThheessee ccoonnssttaannttss aarree iimmpplliicciittllyy ppuubblliicc,, ssttaattiicc aanndd ffiinnaall UUssiinngg aa ssttaattiicc iimmppoorrtt ddeeccllaarraattiioonn aalllloowwss cclliieennttss ttoo uussee tthheessee ccoonnssttaannttss wwiitthh jjuusstt tthheeiirr nnaammeess 30
  • 31. Implementation vvss.. IInntteerrffaaccee 31 IInnhheerriittaannccee IImmpplleemmeennttaattiioonn IInnhheerriittaannccee FFuunnccttiioonnaalliittyy hhiigghh iinn tthhee hhiieerraarrcchhyy EEaacchh nneeww ssuubbccllaassss iinnhheerriittss oonnee oorr mmoorree mmeetthhooddss ddeeccllaarreedd iinn ssuuppeerrccllaassss SSuubbccllaassss uusseess ssuuppeerrccllaassss ddeeccllaarraattiioonnss IInntteerrffaaccee IInnhheerriittaannccee FFuunnccttiioonnaalliittyy lloowweerr iinn hhiieerraarrcchhyy SSuuppeerrccllaassss ssppeecciiffiieess oonnee oorr mmoorree aabbssttrraacctt mmeetthhooddss MMuusstt bbee ddeeccllaarreedd ffoorr eeaacchh ccllaassss iinn hhiieerraarrcchhyy OOvveerrrriiddddeenn ffoorr ssuubbccllaassss--ssppeecciiffiicc iimmpplleemmeennttaattiioonnss
  • 32. CCrreeaattiinngg aanndd UUssiinngg IInntteerrffaacceess DDeeccllaarraattiioonn bbeeggiinnss wwiitthh iinntteerrffaaccee kkeeyywwoorrdd CCllaasssseess iimmpplleemmeenntt aann iinntteerrffaaccee ((aanndd iittss mmeetthhooddss)) CCoonnttaaiinnss ppuubblliicc aabbssttrraacctt mmeetthhooddss CCllaasssseess ((tthhaatt iimmpplleemmeenntt tthhee iinntteerrffaaccee)) mmuusstt iimmpplleemmeenntt tthheessee mmeetthhooddss 32
  • 33. CCrreeaattiinngg aanndd UUssiinngg IInntteerrffaacceess CCoonnssiiddeerr tthhee ppoossssiibbiilliittyy ooff hhaavviinngg aa ccllaassss wwhhiicchh mmaanniippuullaatteess mmaatthheemmaattiiccaall ffuunnccttiioonnss YYoouu wwaanntt ttoo sseenndd aa ffuunnccttiioonn aass aa ppaarraammeetteerr NNoottee tthhaatt CC++++ aalllloowwss tthhiiss ddiirreeccttllyy JJaavvaa ddooeess nnoott TThhiiss ttaasskk ccaann bbee aaccccoommpplliisshheedd wwiitthh iinntteerrffaacceess 33
  • 34. CCrreeaattiinngg aanndd UUssiinngg IInntteerrffaacceess DDeeccllaarree iinntteerrffaaccee FFuunnccttiioonn DDeeccllaarree ccllaassss MMyyFFuunnccttiioonn wwhhiicchh iimmpplleemmeennttss FFuunnccttiioonn NNoottee ootthheerr ffuunnccttiioonnss wwhhiicchh aarree ssuubbccllaassss oobbjjeeccttss ooff MMyyFFuunnccttiioonn VViieeww tteesstt pprrooggrraamm wwhhiicchh ppaasssseess FFuunnccttiioonn ssuubbccllaassss oobbjjeeccttss ttoo ffuunnccttiioonn mmaanniippuullaattiioonn mmeetthhooddss 34
  • 35. CCaassee SSttuuddyy:: AA PPaayyaabbllee HHiieerraarrcchhyy 35 PPaayyaabbllee iinntteerrffaaccee CCoonnttaaiinnss mmeetthhoodd ggeettPPaayymmeennttAAmmoouunntt IIss iimmpplleemmeenntteedd bbyy tthhee IInnvvooiiccee aanndd EEmmppllooyyeeee ccllaasssseess Click to view the test program
  • 36. EEnndd ooff CChhaapptteerr 1100 LLeeccttuurree 36
  • 37. Following slides aarree ffrroomm pprreevviioouuss eeddiittiioonn.. LLiinnkkss mmaayy nnoott wwoorrkk.. 37
  • 38. SSoouurrccee CCooddee ffoorr SShhaappee SSuuppeerrccllaassss 38 HHiieerraarrcchhyy SShhaappee ssuuppeerrccllaassss,, FFiigguurree 1100..66 NNoottee aabbssttrraacctt mmeetthhoodd,, ggeettNNaammee PPooiinntt ssuubbccllaassss,, FFiigguurree 1100..77 NNoottee,, eexxtteennddss SShhaappee,, oovveerrrriiddee ooff ggeettNNaammee CCiirrccllee ssuubbccllaassss,, FFiigguurree 1100..88 NNoottee eexxtteennddss PPooiinntt,, oovveerrrriiddee ooff ggeettAArreeaa,, ggeettNNaammee,, aanndd ttooSSttrriinngg CCyylliinnddeerr ssuubbccllaassss,, FFiigguurree 1100..99 NNoottee eexxtteennddss CCiirrccllee,, oovveerrrriiddee ooff ggeettAArreeaa,, ggeettNNaammee,, aanndd ttooSSttrriinngg
  • 39. SSoouurrccee CCooddee ffoorr SShhaappee SSuuppeerrccllaassss 39 HHiieerraarrcchhyy DDrriivveerr pprrooggrraamm ttoo ddeemmoonnssttrraattee,, FFiigguurree 1100..1100 NNoottee aarrrraayy ooff ssuuppeerrccllaassss rreeffeerreenncceess OOuuttppuutt ooff pprrooggrraamm
  • 40. PPoollyymmoorrpphhiicc PPaayyrroollll SSyysstteemm CCllaassss hhiieerraarrcchhyy ffoorr ppoollyymmoorrpphhiicc ppaayyrroollll aapppplliiccaattiioonn 40 Employee SalariedEmployee CommissionEmployee HourlyEmployee BasePlusCommissionEmployee
  • 41. PPoollyymmoorrpphhiicc PPaayyrroollll SSyysstteemm AAbbssttrraacctt ssuuppeerrccllaassss,, EEmmppllooyyeeee,, FFiigguurree 1100..1122 NNoottee aabbssttrraacctt ccllaassss ssppeecciiffiiccaattiioonn,, aabbssttrraacctt eeaarrnniinnggss mmeetthhoodd AAbbssttrraacctt ssuubbccllaassss,, SSaallaarriieeddEEmmppllooyyeeee,, FFiigguurree 1100..1133 NNoottee eexxtteennddss EEmmppllooyyeeee,, oovveerrrriiddee ooff eeaarrnniinnggss mmeetthhoodd LLooookk aatt ootthheerr ssuubbccllaasssseess iinn tteexxtt,, ppgg 46611 NNoottee hheerree aallssoo tthhee oovveerrrriiddee ooff 41 eeaarrnniinnggss
  • 42. PPoollyymmoorrpphhiicc PPaayyrroollll SSyysstteemm VViieeww tteesstt pprrooggrraamm,, FFiigguurree 1100..1177 NNoottee aarrrraayy ooff ssuuppeerrccllaassss rreeffeerreenncceess wwhhiicchh aarree ppooiinntteedd aatt vvaarriioouuss ssuubbccllaassss oobbjjeeccttss NNoottee ggeenneerriicc ccaallllss ooff ttooSSttrriinngg mmeetthhoodd NNoottee uussee ooff iinnssttaannttcceeooff ooppeerraattoorr CCoonnssiiddeerr uussee ooff ddoowwnnccaassttiinngg ((lliinnee 3377)) NNoottee uussee ooff ggeettCCllaassss(())..ggeettNNaammee(()) mmeetthhoodd GGiivveess aacccceessss ttoo tthhee nnaammee ooff tthhee ccllaassss 42
  • 43. PPoollyymmoorrpphhiicc PPaayyrroollll SSyysstteemm 43 OOuuttppuutt ooff tthhee ppaayyrroollll tteessttiinngg pprrooggrraamm NNoottee rreessuullttss ooff ggeettCCllaassss(())..ggeettNNaammee(()) ccaallllss
  • 44. CCrreeaattiinngg aanndd UUssiinngg IInntteerrffaacceess VViieeww iimmpplleemmeennttaattiioonn ooff tthhee iinntteerrffaaccee SShhaappee,, FFiigguurree 1100..1199 NNoottee tthhee ffoolllloowwiinngg:: LLiinnee 4 ppuubblliicc ccllaassss PPooiinntt eexxtteennddss OObbjjeecctt 44 iimmpplleemmeennttss SShhaappee {{ DDeeccllaarraattiioonn ooff aaddddiittiioonnaall mmeetthhooddss DDeeccllaarraattiioonn ooff aabbssttrraacctt mmeetthhooddss ggeettAArreeaa,, ggeettVVoolluummee,, aanndd ggeettNNaammee
  • 45. 45 NNeesstteedd CCllaasssseess TToopp--lleevveell ccllaasssseess NNoott ddeeccllaarreedd iinnssiiddee aa ccllaassss oorr aa mmeetthhoodd NNeesstteedd ccllaasssseess DDeeccllaarreedd iinnssiiddee ootthheerr ccllaasssseess IInnnneerr ccllaasssseess NNoonn--ssttaattiicc nneesstteedd ccllaasssseess DDeemmoonnssttrraatteedd iinn FFiigguurree 1100..2222 RRuunn tthhee pprrooggrraamm AAuuddiioo
  • 46. MMeennttiioonneedd IInn TThhee AAuuddiioo 46 IInnhheerriittaannccee HHiieerraarrcchhyy PPaanneess ooff aa JJFFrraammee BBaacckkggrroouunndd CCoonntteenntt GGllaassss Object Component Container Window Frame JFrame
  • 47. MMeennttiioonneedd IInn TThhee AAuuddiioo TThhrreeee tthhiinnggss rreeqquuiirreedd wwhheenn 47 ppeerrffoorrmmiinngg eevveennttss 11.. IImmpplleemmeenntt tthhee iinntteerrffaaccee 22.. RReeggiisstteerr tthhee eevveenntt hhaannddlleerrss 33.. SSppeecciiffiiccaallllyy iimmpplleemmeenntt tthhee aaccttiioonnPPeerrffoorrmmeedd mmeetthhooddss
  • 48. 48 NNeesstteedd CCllaasssseess AAnn iinnnneerr ccllaassss iiss aalllloowweedd ttoo ddiirreeccttllyy aacccceessss iittss iinnnneerr ccllaassss''ss vvaarriiaabblleess aanndd mmeetthhooddss WWhheenn tthhiiss uusseedd iinn aann iinnnneerr ccllaassss RReeffeerrss ttoo ccuurrrreenntt iinnnneerr--ccllaassss oobbjjeecctt TToo aacccceessss oouutteerr--ccllaassss uussiinngg tthhiiss PPrreecceeddee tthhiiss wwiitthh oouutteerr--ccllaassss nnaammee
  • 49. 49 NNeesstteedd CCllaasssseess AAnnoonnyymmoouuss iinnnneerr ccllaassss DDeeccllaarreedd iinnssiiddee aa mmeetthhoodd ooff aa ccllaassss HHaass nnoo nnaammee IInnnneerr ccllaassss ddeeccllaarreedd iinnssiiddee aa mmeetthhoodd CCaann aacccceessss oouutteerr ccllaassss''ss mmeemmbbeerrss LLiimmiitteedd ttoo llooccaall vvaarriiaabblleess ooff mmeetthhoodd iinn wwhhiicchh ddeeccllaarreedd NNoottee uussee ooff aannoonnyymmoouuss iinnnneerr ccllaassss,, FFiigguurree 1100..2233
  • 50. NNootteess oonn NNeesstteedd CCllaasssseess CCoommppiilliinngg ccllaassss tthhaatt ccoonnttaaiinnss nneesstteedd ccllaassss RReessuullttss iinn sseeppaarraattee ..ccllaassss ffiillee OOuutteerrCCllaassssNNaammee$$IInnnneerrCCllaassssNNaammee..ccllaassss IInnnneerr ccllaasssseess wwiitthh nnaammeess ccaann bbee ddeeccllaarreedd aass ppuubblliicc,, pprrootteecctteedd,, pprriivvaattee oorr ppaacckkaaggee aacccceessss 50
  • 51. NNootteess oonn NNeesstteedd CCllaasssseess AAcccceessss oouutteerr ccllaassssss tthhiiss rreeffeerreennccee OOuutteerrCCllaassssNNaammee..tthhiiss OOuutteerr ccllaassss iiss rreessppoonnssiibbllee ffoorr ccrreeaattiinngg iinnnneerr ccllaassss oobbjjeeccttss OOuutteerrCCllaassssNNaammee..IInnnneerrCCllaassssNNaammee iinnnneerrRReeff == 51 rreeff..nneeww IInnnneerrCCllaassssNNaammee(());; NNeesstteedd ccllaasssseess ccaann bbee ddeeccllaarreedd ssttaattiicc OObbjjeecctt ooff oouutteerr ccllaassss nneeeedd nnoott bbee ccrreeaatteedd SSttaattiicc nneesstteedd ccllaassss ddooeess nnoott hhaavvee aacccceessss ttoo oouutteerr ccllaassss''ss nnoonn--ssttaattiicc mmeemmbbeerrss
  • 52. Type-Wrapper CCllaasssseess ffoorr PPrriimmiittiivvee 52 TTyyppeess EEaacchh pprriimmiittiivvee ttyyppee hhaass oonnee CChhaarraacctteerr,, BByyttee,, IInntteeggeerr,, BBoooolleeaann,, eettcc.. EEnnaabbllee ttoo rreepprreesseenntt pprriimmiittiivvee aass OObbjjeecctt PPrriimmiittiivvee vvaalluueess ccaann bbee pprroocceesssseedd ppoollyymmoorrpphhiiccaallllyy uussiinngg wwrraappppeerr ccllaasssseess DDeeccllaarreedd aass ffiinnaall MMaannyy mmeetthhooddss aarree ddeeccllaarreedd ssttaattiicc
  • 53. Invoking SSuuppeerrccllaassss MMeetthhooddss ffrroomm 53 SSuubbccllaassss OObbjjeeccttss RReeccaallll tthhee ppooiinntt aanndd cciirrccllee hhiieerraarrcchhyy NNoottee :: AAssssiiggnnmmeenntt ooff ssuuppeerrccllaassss rreeffeerreennccee ttoo ssuuppeerrccllaassss vvaarriiaabbllee AAssssiiggnnmmeenntt ooff ssuubbccllaassss rreeffeerreennccee ttoo ssuubbccllaassss vvaarriiaabbllee NNoo ssuurrpprriisseess bbuutt tthhee ""iiss--aa"" rreellaattiioonnsshhiipp mmaakkeess ppoossssiibbllee AAssssiiggnnmmeenntt ooff ssuubbccllaassss rreeffeerreennccee ttoo ssuuppeerrccllaassss vvaarriiaabbllee SSeeee FFiigguurree 1100..11
  • 54. Using SSuuppeerrccllaassss RReeffeerreenncceess wwiitthh SSuubbccllaassss--TTyyppee VVaarriiaabblleess SSuuppppoossee wwee hhaavvee aa ssuuppeerrccllaassss oobbjjeecctt PPooiinntt33 ppooiinntt == nneeww PPooiinntt33 ((3300,, 4400));; 54 TThheenn aa ssuubbccllaassss rreeffeerreennccee CCiirrccllee44 cciirrccllee;; IItt wwoouulldd bbee iilllleeggaall ttoo hhaavvee tthhee ssuubbccllaassss rreeffeerreennccee aaiimmeedd aatt tthhee ssuuppeerrccllaassss oobbjjeecctt cciirrccllee == ppooiinntt;;
  • 55. SSuubbccllaassss MMeetthhoodd CCaallllss vviiaa SSuuppeerrccllaassss--TTyyppee VVaarriiaabblleess CCoonnssiiddeerr aaiimmiinngg aa ssuubbccllaassss rreeffeerreennccee aatt aa ssuuppeerrccllaassss oobbjjeecctt IIff yyoouu uussee tthhiiss ttoo aacccceessss aa ssuubbccllaassss-- oonnllyy mmeetthhoodd iitt iiss iilllleeggaall 55 NNoottee FFiigguurree 1100..33 LLiinneess 2222 -- 2233
  • 56. Summary ooff LLeeggaall AAssssiiggnnmmeennttss bbeettwweeeenn SSuuppeerr-- aanndd SSuubbccllaassss VVaarriiaabblleess AAssssiiggnniinngg ssuuppeerrccllaassss rreeffeerreennccee ttoo ssuuppeerrccllaassss-- ttyyppee vvaarriiaabbllee OOKK AAssssiiggnniinngg ssuubbccllaassss rreeffeerreennccee ttoo ssuubbccllaassss--ttyyppee vvaarriiaabbllee OOKK AAssssiiggnniinngg ssuubbccllaassss oobbjjeecctt''ss rreeffeerreennccee ttoo ssuuppeerrccllaassss ttyyppee--vvaarriiaabbllee,, ssaaffee AA cciirrccllee ""iiss aa"" ppooiinntt OOnnllyy ppoossssiibbllee ttoo iinnvvookkee ssuuppeerrccllaassss mmeetthhooddss DDoo NNOOTT aassssiiggnn ssuuppeerrccllaassss rreeffeerreennccee ttoo ssuubbccllaassss--ttyyppee vvaarriiaabbllee YYoouu ccaann ccaasstt tthhee ssuuppeerrccllaassss rreeffeerreennccee ttoo aa ssuubbccllaassss ttyyppee ((eexxpplliicciittllyy)) 56
  • 57. PPoollyymmoorrpphhiissmm EExxaammpplleess 57 SSuuppppoossee ddeessiiggnniinngg vviiddeeoo ggaammee SSuuppeerrccllaassss SSppaacceeOObbjjeecctt SSuubbccllaasssseess MMaarrttiiaann,, SSppaacceeSShhiipp,, LLaasseerrBBeeaamm CCoonnttaaiinnss mmeetthhoodd ddrraaww TToo rreeffrreesshh ssccrreeeenn SSeenndd ddrraaww mmeessssaaggee ttoo eeaacchh oobbjjeecctt SSaammee mmeessssaaggee hhaass mmaannyy ffoorrmmss ooff rreessuullttss EEaassyy ttoo aadddd ccllaassss MMeerrccuurriiaann EExxtteennddss SSppaacceeOObbjjeecctt PPrroovviiddeess iittss oowwnn iimmpplleemmeennttaattiioonn ooff ddrraaww PPrrooggrraammmmeerr ddooeess nnoott nneeeedd ttoo cchhaannggee ccooddee CCaallllss ddrraaww rreeggaarrddlleessss ooff oobbjjeeccttss ttyyppee MMeerrccuurriiaann oobbjjeeccttss pplluugg rriigghhtt iinn
  • 58. 58 PPoollyymmoorrpphhiissmm EEnnaabblleess pprrooggrraammmmeerrss ttoo ddeeaall iinn ggeenneerraalliittiieess LLeett eexxeeccuuttiioonn--ttiimmee eennvviirroonnmmeenntt hhaannddllee ssppeecciiffiiccss AAbbllee ttoo ccoommmmaanndd oobbjjeeccttss ttoo bbeehhaavvee iinn mmaannnneerrss aapppprroopprriiaattee ttoo tthhoossee oobbjjeeccttss DDoonn''tt nneeeedd ttoo kknnooww ttyyppee ooff tthhee oobbjjeecctt OObbjjeeccttss nneeeedd oonnllyy ttoo bbeelloonngg ttoo ssaammee iinnhheerriittaannccee hhiieerraarrcchhyy
  • 59. AAbbssttrraacctt CCllaasssseess aanndd MMeetthhooddss AAbbssttrraacctt ccllaasssseess nnoott rreeqquuiirreedd,, bbuutt rreedduuccee cclliieenntt ccooddee ddeeppeennddeenncciieess TToo mmaakkee aa ccllaassss aabbssttrraacctt DDeeccllaarree wwiitthh kkeeyywwoorrdd aabbssttrraacctt CCoonnttaaiinn oonnee oorr mmoorree aabbssttrraacctt mmeetthhooddss 59 ppuubblliicc aabbssttrraacctt vvooiidd ddrraaww(());; AAbbssttrraacctt mmeetthhooddss NNoo iimmpplleemmeennttaattiioonn,, mmuusstt bbee oovveerrrriiddddeenn
  • 60. IInnhheerriittiinngg IInntteerrffaaccee aanndd 60 IImmpplleemmeennttaattiioonn MMaakkee aabbssttrraacctt ssuuppeerrccllaassss SShhaappee AAbbssttrraacctt mmeetthhoodd ((mmuusstt bbee iimmpplleemmeenntteedd)) ggeettNNaammee,, pprriinntt DDeeffaauulltt iimmpplleemmeennttaattiioonn ddooeess nnoott mmaakkee sseennssee MMeetthhooddss mmaayy bbee oovveerrrriiddddeenn ggeettAArreeaa,, ggeettVVoolluummee DDeeffaauulltt iimmpplleemmeennttaattiioonnss rreettuurrnn 00..00 IIff nnoott oovveerrrriiddddeenn,, uusseess ssuuppeerrccllaassss ddeeffaauulltt iimmpplleemmeennttaattiioonn SSuubbccllaasssseess PPooiinntt,, CCiirrccllee,, CCyylliinnddeerr
  • 61. Polymorphic Interface For The getArea getVolume getName toString 61 Shape Point Circle Cylinder Shape Hierarchy Class 0.0 0.0 abstract default Object implement 0.0 0.0 "Point" [x,y] r2 0.0 "Circle" center=[x,y]; radius=r 2r2 +2rh r2h "Cylinder" center=[x,y]; radius=r; height=h Shape Point Circle Cylinder
  • 62. CCrreeaattiinngg aanndd UUssiinngg IInntteerrffaacceess AAllll tthhee ssaammee ""iiss--aa"" rreellaattiioonnsshhiippss aappppllyy wwhheenn aann iinntteerrffaaccee iinnhheerriittaannccee iiss uusseedd OObbjjeeccttss ooff aannyy ccllaassss tthhaatt eexxtteenndd tthhee iinntteerrffaaccee aarree aallssoo oobbjjeeccttss ooff tthhee iinntteerrffaaccee ttyyppee CCiirrccllee eexxtteennddss PPooiinntt,, tthhuuss iitt iiss--aa SShhaappee MMuullttiippllee iinntteerrffaacceess aarree ppoossssiibbllee CCoommmmaa--sseeppaarraatteedd lliisstt uusseedd iinn ddeeccllaarraattiioonn 62