Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Непонятно с наследованием


Автор: tishaishii 28.8.2012, 07:19
Юнит:
Код
unit Unit1;

interface

type TA = class ( TObject )
    public
      constructor create ;
      procedure test1( );
      procedure test2( );
end;

type TB = class ( TA )
    public procedure test2( );
end;

implementation

constructor TA.create;
begin
end ;

procedure TA.test1( );
begin
    test2();
end;

procedure TA.test2( );
var fh:Text;
begin
    Assign( fh , 'testa.txt' );
    Rewrite( fh );
    Writeln(fh , 'TA: test2' );
    Close( fh ) ;
end;

procedure TB.test2() ;
var fh:Text;
begin
    Assign( fh , 'testb.txt' );
    Rewrite( fh );
    Writeln(fh , 'TB: test2' );
    Close( fh ) ;
end ;

var
  ab : TB ;
begin
  ab:=TB.create;
  ab.test1;
end.


Почему-то вызывается TA.test2, вместо TB.test2. Почему?

Автор: rodnover 28.8.2012, 07:24
Потому что метод надо объявить виртуальным

Код

type TA = class ( TObject )
    public
      constructor create ;
      procedure test1( );
      procedure test2( ); virtual; // Объявляем виртуальным
end;
type TB = class ( TA )
    public procedure test2( ); override; // Переопределяем
end;

Автор: tishaishii 29.8.2012, 08:36
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)