matlab - 如何取消父类(super class)对默认 Matlab 函数的覆盖

标签 matlab oop inheritance

我有两个类,一个父类(super class)和一个子类。子类继承自父类(super class)。

父类(super class)重新定义了默认的 Matlab 函数 disp()。但是,我希望子类“取消”此重新定义并返回使用默认的 Matlab 版本的 disp()。有什么办法可以做到这一点吗?

我知道子类可以通过以下语法调用父类(super class)的方法

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'

提前致谢。

最佳答案

尝试使用builtin

因此,blah_sub 的定义如下:

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

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

关于matlab - 如何取消父类(super class)对默认 Matlab 函数的覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729906/

相关文章:

oop - 接口(interface)和抽象类有什么区别?

C#:从其基类的实例返回继承类(泛型列表)

Matlab - 将低通滤波器应用于矢量?

matlab - 按字母顺序排列的列表中的字符串匹配(MATLAB 方式)

arrays - 在 MATLAB 中高效计算加权距离

oop - 领域模型和对象模型

Matlab 计算错误的表面法线?

c++ - 是否可以在 C++ 中推断类型转换为模板化类型?

c# - C# 中丑陋的继承

c++ - 如何通过定义派生类的构造函数来实例化两个基类的私有(private)数据成员?