我在matlab文档和以前有关使用matlab继承和类构造函数来创建接口的问题时遇到了麻烦.在包装内使其整洁.
而不是拖动我的代码我可以压缩它如下:
一个包MyPkg有一个超类Super和几个子类Sub1 Sub2 …我的大多数属性和方法都是在Super中定义的,这样Sub1和Sub2实际上只存在于将它们的构造函数用于简单例程或者从Super中重载的一些方法.
那么我该如何编写classdef和构造函数来支持我可以使用以下调用的接口:
a = MyPkg.Super(args).Sub1(args)
b = MyPkg.Super(args).Sub1(args).Sub1Method
在这种情况下,为了便于阅读和组织,我想保留与Super相关的参数与Sub1相关的参数.
欢迎提出问题.
编辑:
在考虑了下面接受的答案并进行了一些浏览后,我得出的结论是,上面显示的界面实际上并不符合OO的精神,对于我的数据分析应用程序,一种更合适的方法来处理它将包含一个带有填充对象属性的对象或单元数组的构造函数.因为类是句柄类,所以可以使用它上面的方法来生成所需的方法.即以下
% in +MyPkg\
classdef Super < handle
properties
outputArray
end
methods
function self = Super(args)
self.outputArray=load_values(args);
end
function out = do_analysis(self,params)
% do some analysis
end
end
end
然后使用这个:
data1 = MyPkg.Super(args)
% Populate the outputArray
analysis1 = data1.do_analysis(params)
等等.,
希望能帮助其他人处理这些问题
最佳答案 关于你的问题,如果使用继承,则不能.只能从子类调用直接超类构造函数,只能从子类调用超类构造函数.
Ref.
公开这样的超类真正打破了继承的基础.也许你应该考虑另一种模式,也许是组合(“有一个”而不是“是一个”),如果你需要那种访问?