如何取消超类对默认 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 函数的覆盖的主要内容,如果未能解决你的问题,请参考以下文章

Matlab调用超类抽象构造函数语法看起来很奇怪

方法没有覆盖超类中的任何函数(覆盖 func collectionView)[重复]

Swift - 在超类的覆盖函数中返回子类类型

matlab中如何取消plot画的图

超类是不是需要默认构造函数? [复制]

如何在 MATLAB 中计算 99% 的覆盖率?