比如TA有个属性x
TB是TA的子类,如何让TB隐藏属性x比如:
var
   a:ta;
   b:tb;
   x:Integer;
begin
    a:=ta.create;
    b:=tb.create;
    x:=a.x; //可通过编译
    x:=b.x; //不可通过编译
end;

解决方案 »

  1.   

    在TB中做个同名属性覆盖掉他,地方换换,不要放在Public,放到protected好了
      

  2.   

    我聽過一個規則: 公開了的,就不能隱藏!!!如你所說, 只能在子類b 增加一個同名的屬性, 或重載
    procedure SetX在裹面直接 raise 一個 Error 來提示用戶不能操作
      

  3.   

    在父类的setx方法中判断对象是否是子类的对象,如果是则抛出异常禁止操作!
    同意楼上
      

  4.   

    还有,如果基类和派生类属性类型相同的话,并且无特殊要求的话,无需override原来的属性所对应的成员函数。