2009-04-17 9 views
3

新しいクラスシステムの下でmatlabのサブクラス化に関する質問。私はいくつかの保護されたプロパティを持つクラスAを持っている:Matlabのサブクラス化の質問

classdef Table < Base 

properties (SetAccess = protected, GetAccess = public) 
    PropA = []; 
end %properties 

私はいくつかの特殊な機能を持つサブクラスを作り、さらにがpropaへのアクセスを制限したいと思います。 (つまり、サブクラスでアクセスをプライベートにする)。私の最初の考えはだった:

classdef subTable < Table 

... 
methods (Access = private) 
    out = get.PropA(obj, value); 
end %private methods 

ただし、ヘルプでそれは言う:「あなたは何の属性を指定しないメソッドブロック内のプロパティアクセスメソッドを定義する必要があります。」そのアイデアのためには大変です。

アイデア?

答えて

4

私はこれが可能ではないと思います。 MATLAB Documentationから:

あなたはスーパークラスのプロパティを再定義することを可能にする2つだけ条件があります。

  • スーパークラスプロパティ抽象属性がtrueに設定されているが
  • スーパークラスプロパティSetAccessとGetAccessに設定属性の両方を持っていますプライベート

私はこれを行うことは良い考えではないと思います。 Liskov Substitution Principleに違反しています。テーブルを受け入れるように記述された関数は、サブテーブルを受け入れて適切に動作できるようにする必要があります。そのような関数がPropAにアクセスすると、subTableを渡すと失敗します。