Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
請教一個有關delphi物件繼承的問題: 我寫了一個如下的程式
type TMyObject=class(TObject) private i1:integer; public i2:integer; procedure setvalue(i:integer);virtural; function getvalue:integer;virtual; end; TMyObject2=class(TMyObject) private procedure setvalue(i:integer);override; function getvalue:integer;override; end;
以上兩個定義都在同一個unit中,在另一個unit中
procedure Tform2.Bbutton1Click(Sender:TObject); var MyObject:TMyObject2; begin MyObject:=TMyObject2.Create; MyObject.setvalue(10); MyObject.free; end;
在上面程式中,雖然是不同unit為何能叫用到TMyObject2的private method,難道是因為它是繼承TMyObject的public method嗎?如果是這樣,請問該如何將一個public或published的method或property經過繼承後,讓它無法再使用呢?
是的, 原因正如您所推論的, 想法沒有錯
可是, 以我目前所知, Delphi 一個類別在繼承自另一個類別時, 可以將父類別屬於的 private 或protected 的部分公開出來, 但是如果已經是公開了, 就不能再重新定義成 private, 換句話說,在繼承的過程中, 可以逐漸公開, 反之則不可以
這就好像祕密一樣, 祕密一旦公開了, 就不可能再是祕密了
關於這部分, 您可以參考 Delphi 軟體所附的Component Wirter's Guide 第三十三頁
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |