一个想不通的问题,大家帮忙看一下(100分)

  • 主题发起人 主题发起人 im51boy
  • 开始时间 开始时间
I

im51boy

Unregistered / Unconfirmed
GUEST, unregistred user!
我创建一个基类(是抽象类):
Tmyclass = class(TForm) //是一个窗体
protected
.... //数据
public
... //定义了一些抽象方法
end;

然后从它继承一个子类:
Tmychildclass =class(Tmyclass)
public
.....
label1:Tlabel;
button1:Tbutton;
//加入了一些可视控件如label,button等
end;

定义基类变量:
var
myclass: Tmyclass;
下面就步入正题,下面的这两行代码我看得不太明白
myclass :=Tmyclass(Tmychildclass.NewInstance);//强制类型转换
myclass.ShowModal;//显示这个窗体
那这个myclass所显示的窗体是个什么样的呢,会有label ,button等这些控件显示出来吗?这些可视控件是属于子类的,子类转换为父类后这些控件还会有吗?
谁能帮我分析一下,谢了!
 
并没有真正的发生转换,只是把中国人说成是地球人而已
Tmyclass(Tmychildclass.NewInstance) 也可以写为 Tmychildclass.NewInstance as Tmyclass
 
可以显示,这就是类的多态
翻过来父类赋给子类就不行了
水果 := 苹果;
水果 := 苹果;
 
可以显示!
 
我来补充一下我个人的理解
假如直接就myclass.ShowModal,不通过myclass :=Tmyclass(Tmychildclass.NewInstance)这句话,那这些控件还显示吗?我想应该不会吧!
多态性是通过虚函数来实现的,把子类赋值给父类,那么父类的虚函数就按照子类定义的方式以不同的方式运作
但父类中原先没有这些控件的,子类赋值给父类,父类并不会增加子类中的这些控件,那父类的窗体显示怎么会出现这些控件的呢?这就是我弄不明白的地方!
 
关注ing...
 
方法有问题!
用表单设计器来产生新类,手工添加抽象方法。
 
后退
顶部