Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Musimytentypzmienić:oczywiściemożetobyćVehicle,alelepiejbyłobyużyćtypu
Car,bowtedynarzeczwynikutejmetodymożemywołaćjakieśinnemetodyspecyficzne
dlaklasyCar,np.hipotetycznąmetodęaccelerate()–przyśpiesz.
2.6.Kowariancjatypówwyników
Ituwłaśnieprzydanamsięwspomianawdefinicjiprzedefiniowaniakowariancjatypów
wynikówprzedefiniowanychmetod.
Wsytuacji:
classA{
Smet(){iii}
}
classBextendsA{
Tmet(){iii}
}
metodametmakowariantnytypwyniku,jeśliTjestpodtypemS.
Kowariancjatowspółzmienność–typwynikumetodyzmieniasięwtymsamymkierunku
hierarchiidziedziczenia,cokierunekdziedziczeniaklas,wktórychjestdefiniowana.
ZatemcałkiemspokojniemożemywklasieCarzapisać:
publicCarfill(intamount){
//iii
returnthis;
}
publicCarstart(){
//kowariantnytypwynikuprzedefiniowanejmetody
//iii
returnthis;
}
publicCarstop(){
superistop();
returnthis;
}
publicCarrepair(){
superirepair();
returnthis;
}
inastępnietworzyćnp.takiefragmentykodu:
cifill(10)istart()icrash(difill(20)istart());
Systemioutiprintln(c+"\n"+d);
56
2.Ponownewykorzystanieklas