初始化子类对象数组会创建异构超类数组

时间:2013-09-04 14:22:27

标签: matlab oop

在Matlab中,我有两个类

classdef A < matlab.mixin.Heterogeneous
    properties
        a;
    end
    methods
        function obj = A(varargin)
           obj.a = 3;
        end
    end
end

classdef B < A
    properties
        b;
    end
    methods
        function obj = B(varargin)
            obj = obj@A(varargin);
            obj.b = 4;
        end
    end
end

我现在尝试初始化类型为B的长度为2的数组:

>> objarray(2) = B

objarray = 

  1x2 heterogeneous A (A, B)

  Properties:
    a

  Methods, Superclasses

为什么Matlab坚持要成为A级?我怎么能坚持认为它属于B课呢?

编辑: 使用调试器很明显,Matlab在创建B

时从不输入objarray(1)的构造函数

1 个答案:

答案 0 :(得分:2)

我自己从未尝试过,但我相信matlab.mixin.Heterogeneous有一个方法getDefaultScalarElement,您可以自己实现/覆盖,这将定义如何回填数组的初始元素分配后面的元素。有关详细信息,请参阅this文档页面的中间位置。