【发布时间】: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