超类的输入数量不同

时间:2015-01-07 20:21:11

标签: matlab oop inheritance constructor

B是A的子类。我想用两个参数调用B,如B(arg1,arg2),并在B的构造函数中将arg1传递给A.代码如下:

classdef A
properties
    arg1;
end
methods
    function a = A(arg1)
        if nargin > 0
            a.arg1 = arg1;
        end
    end
end    
end

classdef B < A  
properties
    arg2
end   
methods
    function b = B(arg1, arg2)
        b@A(arg1);
        if nargin > 0
            b.arg2 = arg2;
        end
    end
end 
end

到目前为止,这么好。现在,有时我想在没有参数的情况下调用B(例如初始化数组)。显然调用B()会抛出错误,输入不够。将As构造函数的调用置于条件中也是禁止的。

有没有任何标准的方法来解决这个问题,基本上能够用0和n参数调用子类?

干杯

1 个答案:

答案 0 :(得分:1)

使用varargin

classdef B < A  
properties
    arg2
end   
methods
    function b = B(varargin)
        %pass all but the last argument to the super constructor
        b@A(varargin{1:nargin-1});
        if nargin > 0
            b.arg2 = varargin{2};
        end
    end
end 
end