type
TFigure=class
procedure Draw;
end;
TRectangle=class(TFigure)
procedure Draw;
end;
var
Figure:TFigure;
Rectangle:TRectangle;
begin
Figure:=TFigure.create;
Figure.Draw; //调用的是TFigure.Draw;
Figure.Destroy;
Figure:=TRectangle.create;
Figure.Draw; //调用的是TFigure.Draw,为什么?;
TRectangle(Figure).Draw; //调用的是TRectangle.Draw
Figure.Destroy;
Rectangle:=Trectangle.Create; //调用的是TRectangle.Draw
Rectangle.Draw;
Rectangle.Destroy;
TFigure=class
procedure Draw;
end;
TRectangle=class(TFigure)
procedure Draw;
end;
var
Figure:TFigure;
Rectangle:TRectangle;
begin
Figure:=TFigure.create;
Figure.Draw; //调用的是TFigure.Draw;
Figure.Destroy;
Figure:=TRectangle.create;
Figure.Draw; //调用的是TFigure.Draw,为什么?;
TRectangle(Figure).Draw; //调用的是TRectangle.Draw
Figure.Destroy;
Rectangle:=Trectangle.Create; //调用的是TRectangle.Draw
Rectangle.Draw;
Rectangle.Destroy;
procedure Draw;virtual;
end;
TRectangle=class(TFigure)
procedure Draw;override;
end;
Figure.Draw; //调用的是TFigure.Draw,为什么?;
Figure为TFigure类型,多态是楼上形式的,还分为类有继承关系的和没有继承关系的两种。
因为Figure是TFigure类型的,所以调用的是TFigure的方法。
如果你这样写,就是子类的了。如下向下转型的方法。
TRectangle(Figure).Draw;