【问题标题】:MATLAB method overriding behaviour: choose method from this class and not from the subclassMATLAB 方法覆盖行为:从此类中选择方法,而不是从子类中选择方法
【发布时间】:2015-07-09 20:55:00
【问题描述】:

这里有两个示例类 A 和 B。类 B 是 A 的子类并覆盖方法“myMethod”:

classdef A

    methods
        function this = A()
            this.myMethod();
        end

        function myMethod(this)
            fprintf('A:myMethod\n');
        end
    end
end

classdef B < A

    methods
        function this = B()
            this@A();
            this.myMethod();
        end

        % Overrides 'myMethod' in A
        function myMethod(this)
            fprintf('B:myMethod\n');
        end
    end
end

现在,当我创建一个 B 类的对象时,输出是:

>> B();
B:myMethod
B:myMethod

我的问题是: 如何修改 A 类的构造函数,以便调用 A 类的方法而不是子类的方法。输出应该变成:

>> B();
A:myMethod
B:myMethod

我已经尝试过

this.myMethod@A();

在 A 的构造函数中,但它给了我一个错误,说它只适用于超类调用。

谢谢你的帮助,

阿德里安

【问题讨论】:

  • 我认为您在问题中使用了A,但意思是B
  • @Matt 不!我的意思是A!
  • 我的意思是这句话:«如何修改类 A 以便在 A 的构造函数中,类 A 被调用而不是来自子类的方法。»根据你预期的输出,你想在子类的构造函数中调用超类的方法。
  • 我现在看到了!如果其他人想要复制这个,则不需要 B 类中的 this.myMethod(); 行。构造B时,在A的构造函数中调用B类的方法。OP希望在那里调用A类的方法而不是B类的方法。
  • 我认为唯一的方法是在 A 中添加另一个名称不同的方法并将 A:myMethod 的内容移动到该方法,然后让 A:myMethod 和 A:constructor 调用该方法。

标签: matlab methods subclass superclass overriding


【解决方案1】:

您的语法是正确的,但您不能从子类构造函数调用超类方法。如果您在 B() 中的不同方法中使用相同的语法,它将正常工作。例如,如果我们将 B() 类重新定义为如下所示:

classdef B < A

    methods
        function this = B()
            this = this@A();
        end

        % Overrides 'myMethod' in A
        function myMethod(this)
            fprintf('B:myMethod\n');
            this.myMethod@A() ;
        end
    end
end

我们得到

>> B()
B:myMethod
A:myMethod

ans = 

  B with no properties.

您可以从子类构造函数调用的唯一超类方法是超类构造函数。

【讨论】:

  • 您好,我知道您的示例是如何工作的,但这并不是我需要/描述的。我真的很想修改 A 类的构造函数,以便调用“myMethod”而不是覆盖“myMethod”。我不确定这是否可能......
  • 哦。对不起。您收到的关于它的错误消息仅适用于我在尝试从构造函数调用超类方法时才看到的超类调用。猜猜我跳到了自己前面。应该删除我的答案吗?
  • 嘿,没问题。请不要删除您的答案,感谢您为此付出的努力。谢谢!
猜你喜欢
  • 2016-11-11
  • 1970-01-01
  • 2019-11-23
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多