Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
jestteżmożliwesprawdzenie,conaprawdęsiedziwzmiennejp1czytojestreferencja
doobiektuklasyBook,czyteżmożejakiejśinnejklasypochodnejodPublication.
Prawdawyjdzienajawdopierowfaziewykonaniaprogramu:rzutowanienatypBook
spowodujebłądonazwieClassCastExceptioniprzerwanieprogramu,ponieważ
wp1znajdujesięreferencjadoobiektuklasyJournaliniedasięjejrzutowaćnareferen-
cjędoobiektutypuBook.
2.3.Stwierdzanietypu
Możnasięprzedtakimisytuacjamizabezpieczyć,używającoperatorastwierdzaniatypu
(instanceof).
Wyrażenie:
ref
instanceof
T
mawartośćtrue,jeślireferencjarefniejestnullimożebyćwfaziewykonania
programurzutowanadotypuTbezzgłoszeniawyjątku(błędu)ClassCastException.
Przytym:
Wyrażenienullinstanceofdowolny.typ.refrencyjnyzawszemawartość
false.
WyrażeniexinstanceofTbędziebłędneskładniowo(wystąpibłądwkompi-
lacji),jeślitypreferencjixitypTniesązwiązanestosunkiemdziedziczenia.
WyrażeniexinstanceofTbędziemiałowartośćfalse,jeślifaktycznytyprefe-
rencjixjestnadtypemtypuT.
Narazieterminyfityp”,fipodtyp”ifinadtyp”możemykojarzyćzpojęciamiklasy,
podklasyinadklasy.
Dosyćformalnądenicjęwpraktycznymużyciumożemyrozumiećtak:xinstanceof
Tzwrócitrue,jeślireferencjaxjesttypuTlubdowolnegopodtypuT.
Przykładowykod2.3pokazuje,wjakisposóbmożnaużyćoperatorainstanceof,aby
wyświetlićwłaściwąinformacjęoksiążce(maautora)ioczasopiśmie(manumerorazwolu-
minzwracaneprzezgetVolNr()).
staticvoidinfo(Publicationp){
Stringinfo=pigetTitle();
if(pinstanceofBook)info+=!\n!+((Book)p)igetAuthor();
elseif(pinstanceofJournal)info
+=!\n!+((Journal)p)igetVolNr();
//iii
Systemioutiprintln(info);
}
50
2.Ponownewykorzystanieklas