的外表(派生类引用),因而带来了许多潜在的不安全因素(如访问异常),所
以几乎没有任何价值。"杜撰"这样一个例子,旨在说明在Delphi中的多态的本质,多态的本质:使用一个合法的(通常是基类的)指针/引用来操作对象,在运行期根据实际的对象,来执行不同的操作方法,或者更形象的说法:由对象自己来决定自己操作方式,编译器只需下达做什么的命令(做什么what),而不要管怎么做(how),"怎么做"由为对象自己负责。这样实现了接口和实现的分离,使接口重用变得可能。
***********************************************************************}
cppProgramer:=TCppProgramer(TProgramer.Create);
{为了实现这种病态的多态,把对象引用强制转换为TCppProgramer类型,
从而逃过编译器的检查}
cppProgramer.startWorking;
{调用的TProgramer.startWorking而不是TcppProgramer.startWorking
这就是用派生类指针/引用指向基类对象实现的多态。}
cppProgramer.Free;
cppProgramer:=TCppProgramer(TDocManager.Create);
cppProgramer.startWorking;
{调用的竟然是TDocManager.startWorking,
这就是用派生类指针/引用指向基类对象实现的多态。这种方法极不安全,
而且没有什么必要}
cppProgramer.Free;
end;
试一试
为获得这种多态的感性认识,建议动手试试,上面说到这种使用方法会有潜在的不安全性(如访问异常),而上面的程序运行一点错误都没有出现,想想为什么?什么情况下会出现访问异常,动手写个访问异常的例子,你将收获更多。(参考Demo程序)
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/