ma takie klesy.
chcialbym sie dowiedziec jak zadzialaja rozne sposoby przedefiniowywania metod.
TNADKlasa = class
{1} procedure aaa;
{2} procedure foo;
{3} procedure bar; virtual;
{4} procedure xxx; virtual;
end;
TPodKlasa = class(TKlasa)
{5} procedure aaa;
{6} procedure foo;
{7} procedure bar;
{8} procedure xxx; override;
end;
procedure TNADKlasa.aaa;
begin
writeln('NADKlasa.aaa');
end;
procedure TNADKlasa.foo;
begin
writeln('NADKlasa.foo');
end;
procedure TNADKlasa.bar;
begin
writeln('NADKlasa.bar');
end;
procedure TNADKlasa.xxx;
begin
writeln('KNADlasa.xxx');
end;
//////////////////////////////////////////////////////////
procedure TPodKlasa.aaa; <-- w nadrzednej jest taka sama metoda
begin
writeln('POD Klasa.aaa');
end;
procedure TPodKlasa.foo; <--- w nadrzednej klasie jest taka metoda ale nie virtualna!
begin
inherited; <--- czy to zadziala?
writeln('POD Klasa.foo');
end;
procedure TPodKlasa.bar; <-- w nadrzednej jest metoda virtualna ale przykryta bez override
begin
writeln('POD Klasa.bar');
end;
procedure TPodKlasa.xxx; <--- normalne przesterowanie(? -nie wiem jak to po polsku)
begin
inherited;
writeln('POD Klasa.xxx');
end;
var A,B: TKlasa;
X,Y: TPodKlasa;
begin
A := TPodKlasa.create; <--- tu jest dostep przez wskaznik na nadklase
A.aaa;
A.foo;
A.bar;
A.xxx;
X := TPodKlasa.create; <-- tu jest normalnie
X.aaa;
X.foo;
X.bar;
X.xxx;
Y := A; <-- a tu nie wiem jak:P
Y.aaa;
Y.foo;
Y.bar;
Y.xxx;
end;
No i teraz jest pytanie:
Co uzyskamy na wyjsciu....?
//heh krocej niz tego posta pewnie zajeloby mi napisanie programu i sprawdzenie samemu... :p
generalnie chodzi o to ze chcialbym miec klase ktora bylaby podstawa do budowy klas dziedziczacych.
w dziedziczacych klasach nadpisywalbym tylko niektore metody, a te ktorych nie potrzebuje zostalyby w
klasie nadrzednej. Jakich 'magicznych slow' (virtual, override, inherited, reintroduce...) musze uzyc zeby dzialalo to
bez wzgledu na rzutowanie czy jakies dziwne podejscie do konkretnych obiektow...