我想修改一個子類的不可變/受保護的屬性,使用超類方法或外部實用程序函數(我試圖在當然是子類的構造函數)。在超類方法中修改子類的不可變/受保護的變量
例(我想要做什麼):
classdef Sup
methods
function self = setProperties(self, varargin)
% This method sets the properties of the object
% the input arguments come in the form 'propname1', val1, 'propname2', val2, ...
...
end % setProperties
end % methods
end % classdef Sup
classdef sub < Sup
properties (SetAccess = immutable)
prop1
prop2
prop3
end % properties
methods
function self = sub(varargin)
% constructor
self = setProperties(self, varargin)
end % sub
end % methods
end % classdef sub
>> SomeObj = sub('prop1', 1, 'prop2', 10, 'prop3', 100);
此代碼不能正常工作,我得到錯誤信息「你不能設置只讀屬性‘爲prop1’子」。
我可以設置子屬性來保護,但我不希望它們公開。我同樣認爲setProperties是一個外部工具函數(沒有在超類中定義),但是再次,我不能在sub的構造函數中使用setProperties。
希望你對此有所幫助。 謝謝
Avihay
非常感謝您的回答。在'SetAccess'中使用'?Sup'確實有效,但我不太喜歡它,因爲你的代碼中可能有許多'properties ... end'塊。我真正想要做的是定義一個通用的超類,用於我生成的許多子類。我希望'setProperties'對所有這些子類都可用,但是我想擁有一些'protected'屬性。 – Avihay 2015-03-02 11:20:52
看到我的編輯另一個建議。 – 2015-03-02 11:59:18
再次感謝Sam,這種做法確實很有趣。我實際上並不打算使用'handle'對象,因爲我正在使用的大多數代碼已經使用了'value'對象(不幸的是)...你知道有什麼方法可以爲'value'對象?順便說一下,如果您對可能解決我的問題的其他設計有任何建議,那也會很好。 – Avihay 2015-03-02 12:36:42