2015-10-05 111 views
0

我正在編寫一些使用MATLAB面向對象編程的代碼,嘗試構建系統模擬器。MATLAB:使子類實例的屬性只能從父類修改

我想創建一個代表完整系統的類。該系統依賴於2個子模塊:發射器和接收器。

這兩個模塊我也使用類實現,因爲它們可能會在其他未來的場景中有用。

我的問題是,我希望發送器和接收器的一些屬性只有在創建爲獨立實例時才具有(SetAccess = public),而不是從系統類創建。這是因爲當完整系統的一部分時,不應該在用戶單獨的模塊上完成更改。

我試圖把(SetAccess =保護)到發射器和接收器的情況下,在我的系統類,但是這並不妨礙我做例如從commandwindow改變其參數: system.transmitter.memory = value

有沒有什麼方法可以讓我在不創建發射器和接收器類的不同定義的情況下實現這樣的行爲?

我對OOP相當陌生,所以讓我知道如果這我想實現的行爲是錯誤的。

編輯:我只是把(SetAccess =保護),因爲我想我的孩子級的屬性是可讀的,但不可寫

回答

0

您需要同時設置SetAccess和GetAccess的作爲保護。操作

system.transmitter.memory = value; 

首先獲得您擁有公共GetAccess的,然後設置上具有記憶性的公共訪問變送器的存儲屬性的屬性發射機。

僅設置系統中的SetAccess僅停止變送器屬性的公共設置。所以,

system.transmitter = Transmitter; 

會拋出錯誤。

+0

感謝您的回覆。所以我認爲不可能讓子類可讀取但不可寫入? 因爲這是我一直在尋找的行爲。 –

+0

是的。處理類就是這種情況。一旦你拿到手柄,它可以改變。解決方法是在系統中創建get.transmitter方法,並使其返回發送器實例的新副本。 – Navan

+0

好的謝謝澄清。我想我只是創建一個包含單獨的模塊實例的封裝,並在系統類中使用封閉的寫訪問權限。 –