文档章节

关于子类与父类的转换, 还有多态的说明 - 回复 "靳承柱" 和 "志成" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 294
阅读 7
收藏 0
问题来源: 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;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/08/22/1273923.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
谈谈多态

概述 我们都知道面向对象有四个基本特性:抽象、封装、继承、多态。这四个特性,概括起来可以这么理解,抽象、封装、继承是多态的基础,多态是抽象、封装、继承的表现。多态,是Java中非常重...

Galy_绿
2016/07/11
21
0
Java基础进阶 第四天 抽象接口多态

今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为; 猫的行为:抓老鼠;吃...

Villain丶Cc
2018/06/03
0
0
JVM--再谈继承与多态

此文试图从JVM层面深刻剖析Java中的继承与多态,知识面覆盖class字节码文件,对象的内存布局,JVM的内存区域、分派,方法表等相关知识,内容整合于大量博客,知乎,书籍,并加上博主自己的理...

championhengyi
2018/01/10
0
0
《疯狂java讲义2》读书笔记——面向对象的三大特性之一:多态

多态 java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型与运行时类型不一致,...

我的夏幸运
2016/11/07
11
0
C#基础篇--面向对象(类与对象)

1.类是什么?    类就相当于模板,就是把同一类的事物的共同特征进行的抽象。   类的创建和说明:     类是先根据一些具体的对象(实体的东西)来抽象出来的共同的特性,然后用代码来表...

me黄小峰
2013/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

给windows server中的“未识别的网络”或“无法识别的网络”设置网络位置类型

在windows server中,如果网络没有被正确的识别,那么就需要手工设置一下网络位置类型。 将“公用网络”指定设置为“专用网络“ 【控制面板】--【系统和安全】--【管理工具】--【本地安全策略...

gugudu
48分钟前
1
0
阿里强制要求的21条Java开发规范,可以避免很多坑

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2. 【强制】所有的覆写方法,必须加@Override注解。 说明:getObject...

天王盖地虎626
今天
7
0
oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time ......

hnairdb
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linux-tao
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部