matlab 类 继承,继承MATLAB中的密封类

在MATLAB中,一个类的

attributes之一(在

classdef之后定义)是Sealed,这意味着没有类可以将它用作超类(或者更确切地说,“表示这些类没有被设计为支持子类. “

1).

例如,如果我尝试实例化一个定义如下的类(考虑表是密封的):

classdef SomeLie < table

end

我会得到’MATLAB:class:sealed’错误:

>> A = SomeLie;

Error using SomeLie

Class 'table' is Sealed and may not be used as a superclass.

因为我拒绝被机器告知我可能做什么或不做什么,所以我想继承一个Sealed类,无论如何.我怎样才能在MATLAB R2017a中做到这一点?

我很难相信这个系统是完全不透气的,所以我正在寻找一种解决方案,它会导致Sealed属性被忽略(或类似的东西).所需的解决方案应该无需修改任何“库类定义”即可从中删除Sealed.

我试着玩“反思”,但到了死胡同……

classdef SomeLie % < table

properties (Access = private)

innerTable table;

end

properties (GetAccess = public)

methodHandles struct = struct();

end

methods

function slObj = SomeLie(varargin)

slObj.innerTable = table(varargin{:});

% methodHandles = methods(slObj.innerTable);

ml = ?table; ml = {ml.MethodList.Name}.';

ml = setdiff(ml,'end');

tmpStruct = struct;

for indM = 1:numel(ml)

tmpStruct.(ml{indM}) = str2func([...

'@(varargin)' ml{indM} '(slObj.innerTable,varargin{:})']);

end

slObj.methodHandles = tmpStruct;

end

function varargout = subsref(slObj,varargin)

S = struct(slObj);

varargout{:} = S.methodHandles.(varargin{1}.subs)(varargin{:});

end

end

end

(没有必要修复上面的代码,我只是分享)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab继承是通过创建一个新的,并从现有的派生出来实现的。派生可以继承的属性和方法,并且还可以添加自己的属性和方法。 要定义一个派生,可以使用`classdef`关键字。下面是一个简单的示例,演示了如何创建一个派生: ```matlab classdef ChildClass < ParentClass % ChildClass 是 ParentClass 的派生 properties % 添加子的属性 childProperty end methods % 添加子的方法 function obj = ChildClass(arg1, arg2) % 子的构造函数 obj@ParentClass(arg1, arg2); % 调用父的构造函数 % 初始化子的属性 obj.childProperty = 0; end function childMethod(obj) % 子的方法 % 这里可以使用的方法和属性 obj.parentMethod(); disp('Child method called'); end end end ``` 在上面的例子,`ChildClass`是从`ParentClass`派生出来的子。子添加了一个名为`childProperty`的新属性,并且定义了一个名为`childMethod`的新方法。构造函数`ChildClass`调用了父`ParentClass`的构造函数,并初始化了子的属性。 通过继承,子可以使用的属性和方法,并且还可以添加自己的特定功能。在子,可以通过调用`obj@ParentClass`来访问父的方法和属性。 使用派生时,可以实例化子对象并调用其方法,例如: ```matlab obj = ChildClass(arg1, arg2); % 创建子对象 obj.childMethod(); % 调用子的方法 ``` 这样,派生就能够继承的特性,并且还可以进行个性化的扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值