如何绘制通过超级构造函数传递参数的UML图

如何绘制通过超级构造函数传递参数的UML图,uml,Uml,我有一个名为a的超类和一个从a继承的名为B的子类。超类的构造函数如下所示: A(String name, char displayChar, int hitPoints, Behaviour behaviour) { this.name = name; this.displayChar = displayChar; this.hitPoints = hitPoints addBehaviour(behaviour); } A具有name、displayChar、hitPoints和

我有一个名为a的超类和一个从a继承的名为B的子类。超类的构造函数如下所示:

A(String name, char displayChar, int hitPoints, Behaviour behaviour) 

{
 this.name = name;
 this.displayChar = displayChar;
 this.hitPoints = hitPoints
 addBehaviour(behaviour);
}
A具有name、displayChar、hitPoints和behavior属性,并具有一个调用addBehavior的方法,该方法将行为添加到对象中

子类B的构造函数如下所示:

B(String name) {super(name, char 'b', 10, new WalkBehaviour()); }
现在我的问题是,子类B是否具有WalkBehavior属性

对于这个场景,UML图是什么样子的?我知道B从A继承,A有行为,但在这种情况下B有行为吗?因为B在其类中没有WalkBehavior类型的实例变量,而只通过其超类的构造函数传递WalkBehavior

子类B是否具有WalkBehavior属性

没有,没有申报。超类将对新对象执行某些操作,但显然它隐藏在实现的迷雾中

继承并不涉及多个对象的创建。您的
B
实例只是一个单独的实例,它具有与它的超类类似的属性和操作

因此,在SD中,对于
B
,您将只看到一条生命线:

正如您所看到的,
B
实例只会向超类的构造函数发出一个自调用

注意:@AxelScheithauer在注释中指出,超类将调用
addBehavior
,它可以(但不能)显示在SD中:


类图捕获给定信息:B将不具有WalkBehavior类型的属性。但是–它很可能继承类型为Behavior的私有属性。至少这是添加操作最常见的实现。它将无法直接访问它,因为私有属性仅对A的直接实例可见。但是,B可以通过调用其超类A(尚未定义)的操作间接使用它。另外一句话:对超级构造函数的调用将调用addBehavior。当然,稍后演员还可以称之为。@AxelScheithauer这一切对我们来说都是隐藏的,纯粹是猜测。您不知道
A
如何处理
行为
对象。此外,它取决于编译器实现(或基本上取决于编译器定义)。正如我所说的“最有可能”,因此是推测性的。我们没有隐藏的是超级构造函数调用addBehavior的事实。@AxelScheithauer True,此调用可以在SD中显示(如果有意的话)。稍后我可能会将此添加到答案中。@ThomasKilian感谢您详细的回答。但是,我有一个问题。在实例化B时,B是否依赖于WalkBehavior类?