Object Pascal中派生类能赋值给基类,但反之就不行,为什么? (50分)

  • 主题发起人 主题发起人 ego
  • 开始时间 开始时间
E

ego

Unregistered / Unconfirmed
GUEST, unregistred user!
看书上说,基类能赋值给其派生类,但反之就不行,如:
type
TChild = Class(TParant)
......
end;
......

var
p : TParant;
c : TChild;
begin
p := TParant.create;
c := TChild;
c := p
//错误
p := c: //正确
end;
其中的原理是什么?
 
你好像是说反了。其中原因,请参看Object Pascal!
 
说反了..... *^_^* 哈哈哈~~~~~~~~~~~~~~~~~~~
赶快改过来~~~~~~~~~~~~~~~~
 
知错就改,是个好孩子.[:D]
 
哎呀,人家都改了,居然还是没有指教,哎,这世道......
 
因为考虑到基类可能没有实现某些方法,
是为了保证程序的正确性和兼容性,
你可以强制类型转换,

请大家讨论一下:
TSomeClass(MyObj) 和 MyObj as TSomeClass的区别
 
第一,这是一种规定.
第二,这种规定有它的道理.
为什么有它的道理呢?这个道理是什么呢是什么呢到底是什么呢?
因为基类的所有东东在它的派生类中都有.
所以当基类的变量,被存进了一个派生类的对象,基类的所有方法都可以正常的调用?
反过来,就不行的.
这就是可以 基类:=派生类.
反过来 派生类:=基类
则不行的道理.
 
LiChaoHui:
嗯,明白一点点了。
但我总觉得派生类比基类的功能强大,派生类赋值给基类之后,很多函数岂不是废弃了?

>>你可以强制类型转换,
那怎么强制转换呢?
 
你应该看看一些面向对象的书籍,这些规定在java,C++,delphi中都是一样的.
 
很多函数岂不是废弃了?
----就是费了,不过到时你还可以转换回去

那怎么强制转换呢?
--------TSomeClass(MyObj)
 
这可以说是多态!
 
这违反了从具体到抽象的思想
举一个例:
基类:学生
派生类:研究生

你可以说:研究生是学生
但不可以说:学生是研究生

这是我对面向对象的理解.
 
哦,明白了。
 
后退
顶部