关于子类与父类的转换, 还有多态的说明 - 回复 "靳承柱" 和 "志成" 的问题
作者:互联网
关于子类与父类的转换, 还有多态的说明 - 回复 "靳承柱" 和 "志成" 的问题
问题来源: http://www.cnblogs.com/del/archive/2008/08/22/1002959.html#1294593//关于父类与子类的类型转换: procedure TForm1.FormCreate(Sender: TObject); var List1: TStrings; List2: TStringList; {TStringList 是 TStrings 的子类} begin List1 := TStringList.Create; {List1 只能通过其子类实现} //List1 := TStrings.Create; {不能这样建立, 因为 TStrings 是抽象类, 不能自己实现} List2 := TStringList.Create; {TStrings 里没有排序方法 Sort} //List1.Sort; {所以这样不行} List2.Sort; {List2 所属的 TStringList 有这个方法} {但可以把 List1 转换一下} TStringList(List1).Sort; {这就没问题了} {但如果把 List2 转为 TStrings, 那 List2 也就丢失了 Sort} //TStrings(List2).Sort; {所以这样不行} List1.Free; List2.Free; end;
//为什么要那个抽象的父类? 答案有很多, 其中之一就是为了实现多态. 譬如: procedure TForm1.FormCreate(Sender: TObject); var stream: TStream; {这是很多流类的祖先, 也是抽象类; 只能通过其子类来实例化} begin {可以用 TMemoryStream 来实现 stream} stream := TMemoryStream.Create; {...} stream.Free; {也可以用 TFileStream 来实现 stream} stream := TFileStream.Create('c:\temp\Test.dat', fmCreate); {...} stream.Free; {不同的实现会让 stream 拥有不同而又相似的功能} end;posted on 2008-08-22 11:48 万一 阅读(2793) 评论(2) 编辑 收藏
标签:靳承柱,Sort,TStrings,stream,TStringList,子类,List1,多态,List2 来源: https://blog.51cto.com/u_14617575/2747845