我想创建一个抽象类的数组,并在每个数组的元素上调用一些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中实现这种行为
到目前为止,我所接受的是这个问题的接受答案:
Matlab中的遗传多态性
我缺少的是如何制作数组baseArray?
之类的baseArray = []
原因baseArray(1) = Derived0;
,以期待双,因而失败.
在matlab中实例化Base数组是不可能的,因为类是抽象的,并且不能用matlab创建对象数组的方式创建实例(我知道).
所以,请帮我在Matlab中实现一个多态数组.
我也很欣赏python解决方案,尽管Matlab解决方案是最好的.
谢谢!
在MATLAB中,如果使用实例化数组baseArray = []
,那么您已经声明该数组将是类型,double
因此它将无法工作.相反,您可以使用类的empty
方法来创建该类的空数组.
baseArray = Derived0.empty(); baseArray(1) = Derived0();
或者,您可以立即创建阵列
baseArray = [Derived0(), Derived0(), Derived0()];
此外,如果你想拥有一个异构的对象数组,你需要确保你的基类也继承matlab.mixin.Heterogeneous
,然后你可以做
baseArray = [Derived0(), Derived1(), Derived2()];