Pa tako kazi :)
E sad, ako je metoda public kao sto si naveo u primeru, onda ne znam sta te buni, nema potrebe za bilo kakvim prosledjivanjem referenci, to bi jednostavno odradio pozivom B.NekiMetod() (gde je B objekat tipa TKlasaB), zato sto TKlasaB nasledjuje sve od TKlasaA, pa je B.NekiMetod() isto sto i A.NekiMetod() (nema potrebe da pozivas B.Metod() kojim ces pozvati A.NekiMetod()).
Medjutim, ako tvoja TKlasaB ima svoju implementaciju metode NekiMetod() koja se razlikuje od implementacije klase roditelja metode NekiMetod(), onda bi metodu roditelja pozvao npr. na ovaj nacin:
Code:
TKlasaB.NekiMetod()
begin
inherited NekiMetod(); // <<< ovde pozivas metodu roditelja, u tvom slucaju TKlasaA.NekiMetod()
end;
Ovo se najcesce koristi kod konstruktora klase (ili destruktora), gde unutar svog konstruktora npr. prvo pozivas konstruktor klase roditelja (kako bi bio siguran da ce sve neophodno objektu te klase biti odradjeno kako treba), a zatim odradjujes dodatna podesavanja nephodna samo za klasu naslednika.
Primer:
Code:
// Create a fruit object - parameterless version
constructor TFruit.Create;
begin
// Execute the parent (TObject) constructor first
Inherited; // Call the parent Create method
// Now set a default fruit name
self.name := 'Fruit';
end;
Ali kao sto rekoh, ako je u pitanju nasledjivanje public metoda, nema potrebe ni za kakvim vratolomijama, klasa naslednik nasledjuje sve metode klase roditelja. Cak i da imas ovu situaciju:
Code:
TKlasaC = class
public
procedure NekiMetod();
end;
TKlasaB = class(TKlasaC);
TKlasaA = class(TKlasaB);
A: TKlasaA;
... opet bi mogao jednostavno da pozoves A.NekiMetod(), u tome i jeste lepota nasledjivanja ;) Ali, uzmimo da ja jos uvek nemam neko preterano iskustvo, sacekaj da vidis moze li ti neko iskusniji vise pomoci.
Zanima me, u primeru koji si dao, sta je problem da pozoves B.NekiMetod() (sto je isto kao da si pozvao A.NekiMetod())?
p.s. Postoji i mogucnost da uradis nesto tipa (B as TKlasaA).NekiMetod(), cime ces kroz objekat B pozvati NekiMetod() ne klase TKlasaB, vec klase roditelja TKlasaA. Medjutim, ako je unutar TKlasaB metod NekiMetod() obelezen sa override, onda ces svejedno opet pozvati (samo) metod NekiMetod() klase TKlasaB.