如何取消超类对默认 Matlab 函数的覆盖
Posted
技术标签:
【中文标题】如何取消超类对默认 Matlab 函数的覆盖【英文标题】:How to cancel a superclasses' overriding of a default Matlab function 【发布时间】:2013-09-10 22:41:35 【问题描述】:我有两个类,一个超类和一个子类。子类继承自超类。
超类重新定义了默认的 Matlab 函数disp()
。但是,我希望子类“取消”这个重新定义并返回使用disp()
的默认 Matlab 版本。有没有办法做到这一点?
我知道子类可以通过以下语法调用超类的方法
function result = CallTheSuperClassMethod(obj, arg1, arg2)
result = TheSuperClassMethod@TheSuperClass(obj, arg1, arg2)
end
但是有没有办法通过类似的方式调用 Matlab 默认方法:
function result = CallTheDefaultMethod(obj, arg1, arg2)
result = SomeMethod@DefaultClass(obj, arg1, arg2)
end
我假设 DefaultClass
是所有 Matlab 类继承的类。
这是一个具体的例子。我有两个类,定义如下:
classdef blah_super
properties
superprop = 'super property';
end
methods
function disp(obj)
disp('super');
end
end
end
classdef blah_sub < blah_super
properties
subprop = 'sub property';
end
end
这是我得到的一些命令的结果:
>> a = blah_super
a =
super
>> b = blah_sub
b =
super
但我想以某种方式修改blah_sub
(同时仍继承自blah_super
)所以结果是:
>> b = blah_sub
b =
blah_sub with properties:
subprop: 'sub property'
superprop: 'super property'
提前致谢。
【问题讨论】:
【参考方案1】:尝试使用builtin
所以blah_sub
的定义应该是这样的:
classdef blah_sub < blah_super
properties
subprop = 'sub property';
end
methods
function disp(obj)
builtin('disp', obj);
end
end
end
【讨论】:
完美,谢谢!这个相对晦涩的功能从未出现在我的网络搜索中,主要关注 Matlab 的 OOP 文档。以上是关于如何取消超类对默认 Matlab 函数的覆盖的主要内容,如果未能解决你的问题,请参考以下文章