MATLAB:如何调用继承的抽象类默认方法?括号索引报错
解决MATLAB自定义括号索引时调用父类默认方法的问题
问题原因
matlab.mixin.indexing.RedefinesParen是一个标记类,仅用于声明你的类要重写括号()的索引行为,本身并没有提供可直接调用的parenReference方法。未重写该方法时,MATLAB会使用底层默认索引逻辑;一旦你重写了parenReference,就必须自行实现索引逻辑,无法通过父类调用默认行为。
正确实现方式
如果想保留默认括号索引功能同时扩展逻辑,需要将索引操作转发到类内部的存储对象,通过MATLAB内置函数调用默认索引逻辑。示例代码如下:
classdef Test < matlab.mixin.indexing.RedefinesParen properties Data % 用于存储默认索引操作的核心数据 Property1 end methods (Access=protected) function varargout = parenReference(obj, indexOp) % 转发读取索引操作到Data属性,复用默认逻辑 varargout = builtin('subsref', obj.Data, indexOp); % 在这里添加你的自定义扩展逻辑 end function obj = parenAssign(obj, indexOp, varargin) % 转发赋值索引操作到Data属性,复用默认逻辑 obj.Data = builtin('subsasgn', obj.Data, indexOp, varargin{:}); % 在这里添加你的自定义扩展逻辑 end end end
官方文档核心要点(翻译)
转发索引操作
- 自定义索引类时,若要复用MATLAB默认索引行为,需将操作转发到类的内部存储对象(如数组、结构体),通过
builtin函数调用subsref(读取)或subsasgn(赋值)实现默认逻辑。 - 不要尝试直接调用父类的
parenReference等方法,标记类中无相关实现。
matlab.mixin.indexing.RedefinesParen类
- 该类仅作为标记,声明类将重写括号
()的索引行为,不提供任何索引方法的具体实现。 - 继承后若实现
parenReference或parenAssign其中一个方法,必须完整实现对应逻辑;若都不实现,MATLAB会沿用默认的subsref/subsasgn逻辑。
内容的提问来源于stack exchange,提问作者Владислав Пинчуков
相关产品推荐
相关产品推荐

