是否可以从父类中调用子类中的重写方法?

时间:2019-05-09 18:53:04

标签: oop inheritance dependencies uml

假设我们有一个父类A和一个子类B继承自它。 A具有被B覆盖的方法m()。还假设我们有第三类C,它具有对类A的调用依赖关系。C是否有可能在UML2中从类B调用覆盖方法m()? ?

2 个答案:

答案 0 :(得分:0)

这显然取决于您使用的语言。我个人不知道允许使用这种语言的任何语言。相反,您可能(通常)在B中进行了一项操作,该操作提供了B的superclass'方法的纯功能:

https://euidp.aholddelhaize.com/pkmslogin.form

呼叫顺序可能类似于

enter image description here

答案 1 :(得分:0)

是的,在UML2和大多数OO编程语言(如C ++,C#和Java)中,C可能执行调用B的方法m的行为。

就UML而言,如果您具有此类图:

classdiagram

这是一个有效的时序图:

seqdiagram

方法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