Можно ли вызвать перезаписанные методы в дочернем классе из родительского класса? - PullRequest
0 голосов
/ 09 мая 2019

Предположим, у нас есть родительский класс A и дочерний класс B, наследуемый от него.A имеет метод m (), который перезаписывается B. Предположим также, что у нас есть третий класс C, который имеет зависимость от вызовов для класса A. Возможно ли для C вызвать перезаписывающий метод m () из класса B в UML2

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

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

В терминах UML, если у вас есть этоДиаграмма классов:

classdiagram

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

seqdiagram

Метод 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

Для получения дополнительных примеров, нажмите здесь для онлайн-учебного материала

0 голосов
/ 09 мая 2019

Это явно зависит от языка, который вы используете. Лично я не знаю ни одного языка, который бы позволял это. Вместо этого вы, скорее всего, (в общем случае) будете иметь операцию в B, которая предлагает чистую функциональность B метода суперкласса:

enter image description here

И последовательность вызовов может быть как

enter image description here

...