要屏蔽父类的方法应该怎么做?(100分)

  • 主题发起人 主题发起人 Cobra
  • 开始时间 开始时间
C

Cobra

Unregistered / Unconfirmed
GUEST, unregistred user!
要屏蔽父类的方法应该怎么做?
难道非要这样做吗?

TLink = class
protected
FHead:tpLink;
public
Property Head:tpLink Read FHead Default Nil;
Function Insert(Text:taLinkText):Boolean;
Function Delete(Index:integer;Text:String):Boolean;
procedure Free;
Function Search(Index:integer;Text:String):tpLink;
Function Count:integer;
end;

TStack = class(TLink)
private
Function Insert(Text:taLinkText):Boolean
Virtual
Abstract;
Function Delete(Index:integer;Text:String):Boolean
Virtual
Abstract;
public
Function Push(Text:taLinkText):Boolean;
Function Pop:taLinkText;
end;


还有,
Ta = class
procedure a;
end;

Tb = class(Ta)
procedure a;
end;

和这个有什么区别?

Ta = class
procedure a
virtual;
end;

Tb = class(Ta)
procedure a
override;
end;
 
1问:关注中
2问: 我想前者是编译时间决定函数,后者是运行时间决定函数调用,是多态地体现,具有
非常大地灵活性。
 
1: Ta = class
procedure a;
end;

Tb = class(Ta)
procedure a;
end;
var
a:ta;
begin
a:=ta.create;
a:=tb.create;
a.a// this is Ta's a.
end;
2. Ta = class
procedure a
virtual;
end;

Tb = class(Ta)
procedure a
override;
end;
var
a:ta;
begin
a:=ta.create;
a:=tb.create;
a.a
//this is Tb.a;
end;
 
2、前者具有速度优势,编译的时候,编译器会发出警告,所有必须在后面加上指示字reintroduce.
Ta = class
procedure a;
end;

Tb = class(Ta)
procedure a;reintroduce;
end;
除非您的这个派生类的同名方法的作用即实现方法与祖先类完全不同,否则我认为还是不用
这种方法为好,因为对程序的维护和阅读不方便,容易引起混乱。
后者很明显要额外占用一些内存开销,但却是标准的用法。
 
1。
DELPHI技术内幕 中说
“如果秘密被公布后就不再是秘密了”

2。
其实使用的时候没有什么不同
只是多态实现的方法不同
一个是拷贝所有虚方法表(包括所有的超类)
一个是链接超类的虚方法表
 
yxyyyy:
“如果秘密被公布后就不再是秘密了”什么意思?没办法了吗?
 
如果父类公开一个成员,那么子类就不能将此成员隐藏了。
解决办法:
比如父类:
type
TFather=------
于是,定义TCustomFather,成员同TFather 一致,区别只是将所有成员隐藏。
然后所有子类[red]应该从TCustomFather继承而不是从TFather继承![/red]
Borland的VCL(里面有大量的TCustom????,就是那里给我们继承修改用的)和很
多有名的控件都是这样的,你可以参考。
 
多谢各位
 

Similar threads

I
回复
0
查看
435
import
I
I
回复
0
查看
585
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
后退
顶部