Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
programu.Naprzykładcosięstanie,jeślimamydwiemetodyonazwieshow,pierwsza
zparametremtypushort,adrugazparametremtypuint,iwywołujemymetodęshow
zargumentemtypuchar?Powiedzieliśmyprzedchwilą,żezostaniewywołanametoda,
którejparametrynajlepiejpasujądoargumentówwywołania.Ponieważtypshortjest
fibliższy”typowicharniżtypint,mogłobysięwydawać,żezostaniewywołanametoda
show(short).Tymczasem–jakwiemy–wykonywanajestpromocjaargumentutypuchar
dotypuintibędziewywołanametodashow(int).
Jeżelinieznamydobrzemechanizmówautomatycznychkonwersji,towmetodachprze-
ciążonychspecyfikujmyróżnąliczbęparametrówlubcałkowicieróżnetypyparametrów.
Ogólnie,algorytmwyboruprzezkompilatorodpowiedniejmetodyprzeciążonejjestdość
skomplikowanyimożemiećzaskakujące,nieintuicyjnekonsekwencje(zob.specyfikację
językaJava[10]).Równieżztegopowodunależywyraźnieróżnicowaćliczbęlubtypy
argumentów.
Zwróćmyteżuwagę,żeprzeciążaniefirozciągasię”naróżnerodzajemetod.Dwie
metody–statycznainiestatyczna–otejsamejnazwie,aleoróżnychtypachlubliczbie
argumentówsąprzeciążone.Podobniejakmetodymożemyprzeciążaćkonstruktory.Znaczy
to,żewjednejklasiemożemymiećkilkawersjikonstruktorówzróżnymiparametrami.
Wtensposóbudostępniamyróżnesposobyinicjowaniaobiektówklasy.
Wtakimprzypadku,byniepowtarzaćwspólnegokoduwróżnychkonstruktorach,
wygodnaokazujesięmożliwośćwywoływaniakonstruktorazinnegokonstruktora.Dotakie-
gowywołaniastosujemysłowokluczowethis,coilustrujeponiższyfragmentskładni:
Vehicle(intw,inth,intl,intww){
this(null,w,h,l,ww);
}
Vehicle(Personp,intw,inth,intl,intww){
owner=p;
width=w;
height=h;
length=l;weight=ww;state=STOPPED;
}
Konstrukcjathis(iii)powinnabyćpierwsząinstrukcjąwcielekonstruktora.
1.6.Klasyiobiektyniezmienne
WróćmyjeszczenachwilędodefinicjiklasyPerson.Jakwidzieliśmy–wramachnaszej
aplikacji–jejobiektypoutworzeniuniemogązmieniaćswoichstanów(wtymprzypadku
wartościpólnameipesel).Takieniezmienne(immutable)klasyodgrywająważnąrolę
wprogramowaniu,bom.in:
1.6.Klasyiobiektyniezmienne
27