如何取消超类的覆盖默认Matlab函数

时间:2013-09-10 22:41:36

标签: matlab oop inheritance

我有两个类,一个超类和子类。子类继承自超类。

超类重新定义了默认的Matlab函数disp()。但是,我希望子类“取消”此重新定义,然后返回使用默认的Matlab版本disp()。有没有办法做到这一点?

我知道子类可以通过以下语法调用超类的方法

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 个答案:

答案 0 :(得分:3)

尝试使用builtin

所以blah_sub的定义是这样的:

classdef blah_sub < blah_super
  properties
    subprop = 'sub property';
  end

  methods
    function disp(obj)
      builtin('disp', obj);
    end
  end
end