首页 > 解决方案 > 如何将来自不同类的对象存储在一个数组中并在 MATLAB 中调用相同的函数(定义不同)?

问题描述

我有两个子类:

它们的对象将通过将它们附加到它们的末端来创建路径。这些都有自己的“plotCurve”方法。我想将这些对象存储在一个数组中,例如:

path = [line1,line2,arc1,line3,arc2,arc3,line4,arc4,arc5...];

(我认为“路径”应该是超类“路径”的对象)当我编写类似的代码时;

for i=1:size(path)
    path(i).plotCurve;
    hold on
end

应该显示结果。我应该能够看到整个路径。(因此,当“Line”对象出现时,“plotCurve”方法应该运行,并且对于 Arc 对象也是如此)。

标签: matlaboopinterfacesubclasssuperclass

解决方案


看起来从matlab.mixin.Heterogeneous允许这种行为的子类化:

classdef Path < matlab.mixin.Heterogeneous
%...
end

classdef Line < Path
%...
end

classdef Arc < Path
%...
end

path = [Line,Line,Arc,Line,Arc,Arc];

figure, hold on
for i=1:numel(path)
    path(i).plotCurve;
end

我在这里找到了这个:https ://www.mathworks.com/matlabcentral/answers/4354-matlab-handle-class-violates-polymorphism-on-handle-equivalence

虽然我认为制作单元数组更容易path,但上面代码中的行为没有区别,除了使用不同的索引:path{i}.plotCurve


推荐阅读