2013-08-01 83 views
3

我的子類與我的超類具有相同的屬性。 這看起來像下面在Matlab中使用超類功能修改子類屬性

classdef superclass < handle 
    properties 
     a 
     b 
     c 
    methods 
     function sup = superclass(...) 
      sup.create(...) 
     end 

classdef subclass < superclass 
    properties 
     a1 
     b1 
     c1 
    methods 
     function sub = subclass(...) 

現在我想子類的構造函數先初始化超性能

​​

,然後(這是我在哪裏卡住)子類構造函數其次初始化所有值a1,b1,c1。 由於其初始化屬性SUP和子之間不改變的過程,我想重新使用它像這樣:

function sub = subclass(args1, args2) 
     [email protected](args1) 
     sub.create(args2) 

我怎麼能達到這一點,而不需要編寫一個新的「創造」功能的子類?

回答

2

一種可能性是重構create方法返回三個值(而不是硬編碼的屬性),那麼你可以把它在超類和sublcass既:

[sup.a,sup.b,sup.c] = sup.create(...); 

[sub.a1,sub.b1,sub.c1] = sub.create(args2); 

其中

classdef superclass < handle 
    methods (Access = protected) 
     function [x,y,z] = create(obj, args) 
      x = ..; y = ...; z = ...; 
     end 
    end 
end 

或者,你可以perh AP使用動態字段名稱以抽象的部分:

propname = 'a'; 
obj.(propname) = 0; 

和具有create方法接收包含屬性名來填充字符串的單元陣列。