继承类跟子孙类有何差别?(100分)

  • 主题发起人 主题发起人 youou
  • 开始时间 开始时间
Y

youou

Unregistered / Unconfirmed
GUEST, unregistred user!
继承类跟子孙类有何差别?

能否详细说一说有什么区别呢?
 
一样的啦,都是来自于一个父亲。
 
有本书上这么写着:{关于用StringGrid控件删除一行的}
类TStringGrid的祖先类TCustomGrid提供了DeleteRow方法,但其可见域为protected而
不是Public,所以其子孙类TDawGrid和TStringGrid都无法直接访问。但根据Delphi的面向
对象的概念,继承是可以看到父类的Protected域的属性和方法的,所以只需从
类TStringGrid继承一个临时类,在需要用到DeleteRow方法时将TStringGrid对象格式化
为此临时类的对象即可。

type
TtempStringGrid=class(TStringGrid);

procedure MyDeleteRow(StringGrid:TStringGrid;ARow:integer)
begin
with TtempStringGrid(StringGrid) do
DeleteRow(ARow)
end;

以上程序可以执行!

若改为:
with TStringGrid(StringGrid) do {这好像很多余。。。}
DeleteRow(ARow)

这些是不是可以说明 继承类跟子孙类不同呢?

能给点解释吗?



 
原来是这样的问题,书讲得不清楚(估计是国内的书籍)。
type
TtempStringGrid=class(TStringGrid)
//1
上面一句话的意思是这样:
protected的属性在本单元中(unit)是可见的,但在另一个单元中调用的话就是不可见的了,
所以这里用1这样一句废话是让TStringGrid的protected的属性在调用他的单元可见。
 
Delphi的unit有个很好玩的特性: private和protected类型的数据可以被同一单元里的任何函数或过程调用。
既然是private和protected类型的数据,那作者的原意肯定是不想让别人看到,但是有时候这个特性也会帮
我们做一些意想不到的事情,比如你给的例子。但是,切忌:不可滥用!因为毕竟不完全符合封装的特性。
 
接受答案了.
 
后退
顶部