关于类的继承问题:(50分)

  • 主题发起人 主题发起人 南腔北调
  • 开始时间 开始时间

南腔北调

Unregistered / Unconfirmed
GUEST, unregistred user!
如果有二个类
A,B:B继承自A,A继承自TOBJECT
怎么让一个A的属性P在A内是非private,但B继承后,在B内P是private的
二个在不同的单元
 
我费解。。。。。难道在 父类是 Private的。在子类中就跑到别的地方去了???你的问题应该没说清楚。
 
我也不懂你的要求!!
 
看不懂你的要求
 
我好像看明白楼主的意思了。这样是不可能实现的
 
所以看不懂啊!
 
属性存储域在private中,而声明都不在private中。
如果是方法,好像没办法,因为B只能使A的方法从private变成非private,而反之不能。
 
在B中定义一个函数,返回值为你要的A的属性,再定义一个属性,把读指向刚才那个函数,
如果需要写入的话,可以再定义一个函数
 
啊,那真的是抱歉
我再说一下吧
A,B:B继承自A,A继承自TOBJECT
A的属性P在A内是非private,但B继承后,在B内P是private的
Ta=class
public
p:integer;
end;
tb=class(ta)
private
property p:integer;
end;
好像是不可能实现的,也好像没这种需求,我的需要是这样的:
我有一个操作数据库的基类(Ta),然后下面继承自他的每个子类(Tb)都要用到一个属性(p)
但这个属性只对他们二个是公开的,再下面就是不能访问了
(在TA内是公布的,TB继承时,变为私有的,因为再下面无须访问到他,也最好不要让下面的访问到他(p),如TC继承自TB时,就无法访问到这个属性(p))

我本想把这个属性定义在基类中,现在想想,这样好像不好,因为这个属性是到子类才用到的,在父类中就定义有点多余的感觉,不像方法,可以是虚的。。。

我现在也有点糊涂了,还请各位高手不吝赐教!
(看来以后晚上回家要恶补《设计模式》)
 
Ta=class
public
p:integer;
end;
tb=class(ta)
private
function getp:integer;
end;
function tb.getp:integer;
begin
Result:=p;
end;
如果是只读只用一个函数就可以了,要想写就麻烦些,可以用一个过程,
这个方法不是直接的,好像应该有直接的方法
看看TEdit类,我认为好像可以借用过来用

或者再定义一个公开属性,把这个属性的地址指向P
或者定义一个公开属性,把这个属性值改为P的地址
这些都是我想的,我也是刚学,多了我也不知道
 
这样有什么用呢?
 
就这样吧
 
后退
顶部