nikedeforest
Гость
|
|
« : 19-06-2004 11:20 » |
|
Извеняюсь, если не туды впихнул вопрос. Готовлюсь к экзамену, читаю вопрос и вижу что не знаю, потому что не использовал (не требовалось как-то). Вопрос прост: " дирректива override" , в чем ее смысл? Я всегда думал, что она используется только когда применяется абстрактный метод, но я увидел пример, где дирректива override применяется без абстрактного метода, и я не понял смысл ее нахождения там. Вот в принципе пример:
type
Obj=class procedure virtmetod1; virtual; procedure virtmetod2; virtual; end;
Obj1=class (Obj) procedure virtmetod1;override; end;
procedure obj.virtmetod1; begin writeln('working virtmetod1 Obj'); end;
procedure obj.virtmetod2; begin writeln('working virtmetod2 Obj'); end;
procedure Obj1.virtmetod1; begin writeln('working virtmetod1 Obj1'); end;
var a:Obj1; begin a:=obj.create; a.virtmetod1; a.virtmetod2; end.
И вот что меня смущает, Рез-ты : на консоль выдано virtmetod1 obj1 virtmetod2 obj
а вот если сделать так: изменение в классе Obj1
Obj1=class(Obj) procedure virtmetod1;virtual; end;
саму процедуру не меняем, то рез-ты следующие : на консоль выдано virtmetod1 Obj virtmetod2 Obj Я НЕ ПОНИМАЮ, ПОЧЕМУ. Ну объясните мне дураку такому, что особенного произошло, я знаю для чего испльзуется virtual, неужели я не могу вызвать этот метод. По этому примеру получается что не могу.
|