如何在Matlab中创建一个多态数组

时间:2017-01-22 15:49:48

标签: python matlab oop polymorphism

我想创建一个抽象类的数组,并在每个数组的元素上调用一些run()方法,这些元素引用该类的实现。

在类似Java的东西中(请原谅语法,这只是为了说明一点),代码如下:

abstract class Base{
    public void run();
}

class Derived0 extends Base{
    public void run(){...};//overrides Base's run() method
}

class Derived1 extends Base{
    public void run(){...};//overrides Base's run() method
}

class Derived2 extends Base{
    public void run(){...};//overrides Base's run() method
}

主:

Base baseArray[3];
baseArray[0] = new Derived0();
baseArray[1] = new Derived1();
baseArray[2] = new Derived2();

//runs each possible run() method, without main knowing any of them.
for(int i=0;i<3;++i){
    baseArray.run();
}

我想在matlab中实现此行为

到目前为止,我所接受的是这个问题的接受答案:

Inheritence Polymorphism In Matlab

我缺少的是如何制作数组baseArray?

baseArray = []这样的事情导致baseArray(1) = Derived0;期望加倍,从而失败。

在matlab中实例化Base数组是不可能的,因为类是抽象的,并且不能用matlab创建对象数组的方式创建实例(我知道)。

所以,请帮我在Matlab中实现一个多态数组。

我也很欣赏python解决方案,尽管Matlab解决方案是最好的。

谢谢!

1 个答案:

答案 0 :(得分:5)

在MATLAB中,如果使用baseArray = []实例化数组,那么您已经声明该数组将是double类型,因此它不会起作用。相反,您可以使用类的empty method来创建该类的空数组

baseArray = Derived0.empty();
baseArray(1) = Derived0();

或者,您可以一次创建数组

baseArray = [Derived0(), Derived0(), Derived0()];

此外,如果您想拥有异构的对象数组,那么您需要确保您的基类也继承自matlab.mixin.Heterogeneous,然后您可以

baseArray = [Derived0(), Derived1(), Derived2()];