关于‘保护方法’和‘私有方法’(50分)

  • 主题发起人 主题发起人 swordman_ji
  • 开始时间 开始时间
S

swordman_ji

Unregistered / Unconfirmed
GUEST, unregistred user!
1)unit1
type
st=class

private
procedure test1;

protected
procedure test2;
end;

stu=class(st)
end;


2)unit2
var
f:=stu.create;
f.test1;
f.test2;


发现f.test1和f.test2都会出错
test1是私有方法 在stu中不可见,但test2只是保护方法,为什么
在stu中也不能用

而且把上面两段程序放在同一个unit里即

3)unit3
type
st=class

private
procedure test1;

protected
procedure test2;
end;

stu=class(st)
end;



var
f:=stu.create;
f.test1;
f.test2;

这样就不会发生任何错误

究竟私有方法和保护方法的区别在那,它们什么时候发挥作用
有没有一个区分它们的实际例子?
 
你的UNIT2 USES了 UNIT1没有,没有的话,当然会出错(因为你的STU都没在UNIT2中定义)
 
我上面是简单写法,其实各方面都齐全。
你没见我在3)中写上这样的情况下就不发生错误吗?
 
我觉得private,protected的唯一区别在于protected属性可以被继承,而private属性不可.
 
好想在同一个单元里怎样都行,不同单元就怎么也不行
有没有针对我的问题的解释.
谢谢
 
protected
可以在子类中覆盖或重载,对子类是可见的
private
只对本类是可见的,

以上说法,友类除外
 
有没有详细点的答案
谢谢
 
在面向对象的原理里面,私有部分的方法和属性和方法是不能在类以外的地方进行调用,
因此你在一个单元里调用另一单元里定义的类的私有方法肯定是不行的,按理来说,在同
一单元里定义的一个类调用本一单元里定义的另一个类的私有方法也是不行的,但大概
Borland为了方便还是别的什么考虑,允许这么作。
 
私有和保护方法,一般情况下,对外部单元是不可访问。
只有公有或公布方法外部单元才可以访问。

而Delphi是对单元封装的,也就是说在同一单元中,任何过程都可以对类中的
私有、保护、公有、公布方法引用。
 
现在我知道了private,protected和公用,公布方法的区别
但是private,protected之间的区别还是不清楚,

谢谢
 
私有成员,原则上只有本类中的方法可以调用,其后代类是隐藏的。
保护成员,除了本类中的方法可以调用外,其后代类也可以调用。

不过,前提是父类和子类处于不同的单元中。如果父类和子类都在同一个单元则另当别论。
 
你可以认为DELPHI里少了一个类成员的指示字
即真正的PRIVATE
因为即使一个类的某个成员标为PRIVATE
同一个UNIT里的其它类也能访问.
 
有没有体现到,别的类调用当前类(既两个类没有继承关系)的保护或私有方法发生错误的例
子,我不知道怎么可以实现这样的例子

谢谢
 
private:对本类之外的其它类不可用,但同一单元可访问,因为同一单元的类互为友元,
protect:对子类是可用的。
 
多人接受答案了。
 
你已经接受答案了
但我还是要纠正一个不合适的说法

private:对本类之外的其它类不可用,但同一单元可访问,因为同一单元的类互为友元
----DELPHI里无友元这一说
只是象C++里友元而已
BORLAND正式文档里从未这么说过.

我始终认为DELPHI的PRIVATE同一单元可被其它类实例访问的特性是不伦不类的.

 
后退
顶部