首页 > 解决方案 > Modelica:如何将 Child 类型的实例分配给 Parent 类型的变量?

问题描述

我有课:

class Parent 
end parent;

class Child 
  extends Parent; 
end Child;

在另一个类中,我需要声明一个 Parent 类型的变量并通过 Child 类型的实例对其进行初始化;类似于 Java 语句的东西:

Parent p = new Child();

我怎样才能在 Modelica 中做到这一点?

谢谢

标签: inheritancemodelica

解决方案


Modelica 的类概念是 Java 无法比拟的。例如,你不创建新对象,所以没有什么像

Parent p = new Child();

相反,您只需通过编写来实例化一个类

Parent p;

因此,您不能将子对象分配给父基类。相反,Modelica 的继承特性可以用于重新声明。这意味着,您可以在某个地方实例化一个可替换的基类,以后可以使用该redeclare语句进行更改。

请参阅下面的简单示例。Example2重新声明cls到子类,所以我们cls.c=2在模拟的时候得到。

package Demo

  class Parent
    constant Real c=1;
  end Parent;

  class Child
    extends Parent(c=2);
  end Child;

  model Example1
    replaceable Parent cls;
  end Example1;

  model Example2
     extends Example1(redeclare Child cls);
  end Example2;

end Demo;

总而言之,可以说 Modelica 的面向对象简化为

  • 继承,使用extends
  • 重新声明,使用redeclare

推荐阅读