我想创建一个抽象类的数组,并在每个数组的元素上调用一些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解决方案是最好的。
谢谢!
答案 0 :(得分:5)
在MATLAB中,如果使用baseArray = []
实例化数组,那么您已经声明该数组将是double
类型,因此它不会起作用。相反,您可以使用类的empty
method来创建该类的空数组。
baseArray = Derived0.empty();
baseArray(1) = Derived0();
或者,您可以一次创建数组
baseArray = [Derived0(), Derived0(), Derived0()];
此外,如果您想拥有异构的对象数组,那么您需要确保您的基类也继承自matlab.mixin.Heterogeneous
,然后您可以
baseArray = [Derived0(), Derived1(), Derived2()];