首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于面向对象多态的有关问题

2012-02-08 
关于面向对象多态的问题?typeTFigureclassprocedure DrawendTRectangleclass(TFigure)procedure Draw

关于面向对象多态的问题?
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;



[解决办法]
定义函数时没有表明虚拟和重载。
[解决办法]
1L精辟,LZ看下override的资料吧
[解决办法]
LZ,你那叫改写。
[解决办法]
TFigure=class
procedure Draw;virtual;
end;
TRectangle=class(TFigure)
procedure Draw;override;
end;
[解决办法]
Figure:=TRectangle.create;
Figure.Draw; //调用的是TFigure.Draw,为什么?;
 Figure为TFigure类型,多态是楼上形式的,还分为类有继承关系的和没有继承关系的两种。
[解决办法]
Figure.Draw; //调用的是TFigure.Draw,为什么?;
因为Figure是TFigure类型的,所以调用的是TFigure的方法。
如果你这样写,就是子类的了。如下向下转型的方法。
TRectangle(Figure).Draw;
[解决办法]
这个问题主要涉及delphi的对象模型,对象模型弄通了,这类问题就都通了。

热点排行