假设我们有一个父类A和一个继承它的子类B。A有被B覆盖的方法m(),让我们假设我们有第三个类C,它对类A具有调用依赖关系。C有可能在UML2中从类B调用覆盖方法m()吗?
发布于 2019-05-10 03:05:44
这显然取决于您使用的语言。就我个人而言,我不知道有哪种语言允许这样做。相反,您可能(通常)在B
中有一个操作,它提供B
的超类方法的纯功能:
调用序列可能如下所示
发布于 2019-05-10 03:11:59
是的,在UML2和大多数面向对象编程语言中,如C++、C#和Java,C执行调用B的方法m的行为是可能的。
在UML方面,如果你有这个类图:
那么这是一个有效的序列图:
方法callM
是这样实现的,它调用p.m()
。当您调用callM
时,您可以传递类型B的实际参数,因为它与类型A的形参p兼容。p.m()
的效果将是调用B中被覆盖的方法m。这也称为多态性。
class A {
public m();
}
class B extends A {
public m();
}
class C {
public callM ( p : A ) {
p.m(); // calls either A::m or B::m, depending on actual type of p
}
}
b = new B;
c = new C;
c.callM(b); // let c call method m of class B
有关更多示例,请参阅click here for online study material
https://stackoverflow.com/questions/56065880
复制相似问题