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śinnemetodyspecyczne
dlaklasyCar,np.hipotetycznąmetodęaccelerate()przyśpiesz.
2.6.Kowariancjatypówwyników
Ituwłaśnieprzydanamsięwspomianawdefinicjiprzedefiniowaniakowariancjatypów
wynikówprzedeniowanychmetod.
Wsytuacji:
classA{
Smet(){iii}
}
classBextendsA{
Tmet(){iii}
}
metodametmakowariantnytypwyniku,jeśliTjestpodtypemS.
Kowariancjatowspółzmiennośćtypwynikumetodyzmieniasięwtymsamymkierunku
hierarchiidziedziczenia,cokierunekdziedziczeniaklas,wktórychjestdeniowana.
ZatemcałkiemspokojniemożemywklasieCarzapisać:
publicCarll(intamount){
//iii
returnthis;
}
publicCarstart(){
//kowariantnytypwynikuprzedeniowanejmetody
//iii
returnthis;
}
publicCarstop(){
superistop();
returnthis;
}
publicCarrepair(){
superirepair();
returnthis;
}
inastępnietworzyćnp.takiefragmentykodu:
cill(10)istart()icrash(dill(20)istart());
Systemioutiprintln(c+"\n"+d);
56
2.Ponownewykorzystanieklas