Да, в UML2 и в большинстве языков программирования OO, таких как C ++, C # и Java, вполне возможно, что C выполняет поведение, которое вызывает метод m из B.
В терминах UML, если у вас есть этоДиаграмма классов:

, тогда это правильная диаграмма последовательности:

Метод callM
реализован так, что он вызывает p.m()
.Когда вы вызываете callM
, вы можете передать фактический параметр типа B, потому что он совместим с формальным параметром p типа A. В результате p.m()
будет вызывать переопределенный метод m в B.Это также известно как полиморфизм.
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
Для получения дополнительных примеров, нажмите здесь для онлайн-учебного материала