OOP Intrface vs. Trieda
Mám objekt Objekt1, ktorý je inštanciou potomka triedy TStrings, tento potomk implementuje rozhranie IInterface1. Ďalej mám Objekt2 ktorý obsahuje dve overloadnuté metódy s názvom Add() jedna s parametrom typu TStrings druhá s prametrom typu IInterface1.
1.
Objekt2.Add(Item: TStrings);
2.
Objekt2.Add(Item: IInterface1);
Ktorá z týchto dvoch metód sa zavolá pri zápise?:
Objekt2.Add(Objekt1);
Záleží čo voláš. Je rozdiel TStrings a dáky typ čo odkazuje na rozhranie. Preto si pozri čo ti to rozhranie ponúka (pozri si jeho deklaráciu) a či má dáku náveznosť s typom TStrings. Ťažko takto napísať čo ti volá skôr.
A ešte ak máš overloadnuté 2 procedúry či funkcie, tak podľa mňa nebude volať jedna druhú (to je môj názor a zvlášť cez Interface)
No teraz som to testol a zistil som že trieda má pred rozhraním prednosť. Ja som predpokladal opak.
Neviem, ci je to tak aj v Object Pascale, ale v Jave plati pravidlo, ze sa pouzije "most specific" metoda. To nie je v tomto pripade ani jedna, takze by doslo k chybe a programator by musel pomocou pretypovania urcit, ktora sa ma volat.
jj to pretypovanie funguje aj v Delphi.