type IGreetable = interface end; IMan = interface(IGreetable) function SayHello():string; end; TChinese = class(TinterfacedObject,IMan) procedure SetChinese(name: string); function SayHello():string; end; procedure MyProcedure() var AMan: IMan; Greeting: IGreetable; begin AMan := TChinese.create; //工作正常 Greeting := TChinese.create;//错误 AMan.SetChinese(‘张三‘); //错误 AMan.SayHello; //工作正常 end;
在这个例子中:
*Greeting被声明为IGreetable类型的变量,因为TChinese声明实现的接口中没有列出IGreetable.
所以TChinese类型的实例不能赋值给Greeting.如果改变TChinnese的声明为:
TChinese = class(TinterfaceObject,IGreetable,IMan)
那么,第一个作物语句将变得可用:
Greeting := TChinese.create;//错误->可用
*AMan被声明为IMan类型的变量,虽然它可以引用TChinese类型的实例,但是我们不能用它访问TChinese的SeChinese方法,因为该方法不是IMan接口的方法.但是改变AMan的声明为:
AMan: Tchinese;
那么第二个错误语句将变得可用:
AMan.SetChinese(‘张三‘); //错误->可用
原文地址:https://www.cnblogs.com/YiShen/p/9862789.html
时间: 2024-11-05 16:26:06