2013-08-01 105 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方法接收包含属性名来填充字符串的单元阵列。