S
sanhippo1
Unregistered / Unconfirmed
GUEST, unregistred user!
Mastering Delphi 4第80页:
type
TAnimal = class
...
TDog = class (TAnimal)
...
function Eat: string
virtual;
TCat = class (TAnimal)
...
var
MyAnimal:TAnimal;
begin
1) MyAnimal:=TAnimal.Create;
2) //或 MyAnial:=TDog.Create;
3) if MyAnimal is TDog then TDog(MyAnimal).Eat;
4) //或(MyAnimal as TDog).Eat
a. 我有点不明白关于RTTI。
我在想如果执行了1),那3)条件不满足,不会执行。
但如执行了2),MyAnimal已经引用了TDog,为什么还要用TDog(MyAnimal)强制转换?
同样也如4),如引用TDog为什么还要as呢?
b. 引用TCat的对象是否也能用Eat?也用强制转换?
问题简单,请莫见笑。
type
TAnimal = class
...
TDog = class (TAnimal)
...
function Eat: string
virtual;
TCat = class (TAnimal)
...
var
MyAnimal:TAnimal;
begin
1) MyAnimal:=TAnimal.Create;
2) //或 MyAnial:=TDog.Create;
3) if MyAnimal is TDog then TDog(MyAnimal).Eat;
4) //或(MyAnimal as TDog).Eat
a. 我有点不明白关于RTTI。
我在想如果执行了1),那3)条件不满足,不会执行。
但如执行了2),MyAnimal已经引用了TDog,为什么还要用TDog(MyAnimal)强制转换?
同样也如4),如引用TDog为什么还要as呢?
b. 引用TCat的对象是否也能用Eat?也用强制转换?
问题简单,请莫见笑。