我在 matlab 文档和之前有关使用 matlab 继承和类构造函数创建接口的问题中找不到帮助。为了使其整洁,放在一个包内。
我可以将其压缩如下,而不是拖拽代码:
一套+MyPkg
有一个超类Super
和一些子类Sub1 Sub2
...我的大多数属性和方法都是在 Super 中定义的,这样Sub1
and Sub2
实际上只是为了将它们的构造函数用于简单的例程或者可能是从 Super 重载的一些方法而存在。
那么我该如何编写 classdef 和构造函数来支持可以使用以下调用的接口:
a = MyPkg.Super(args).Sub1(args)
b = MyPkg.Super(args).Sub1(args).Sub1Method
在本例中,为了可读性和组织性,我想将与 Super 相关的参数与与 Sub1 相关的参数分开。
欢迎提问。
EDIT:
在考虑下面接受的答案和一些浏览之后,我得出的结论是,上面显示的界面并不真正符合 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)
etc.,
希望能帮助其他人处理这些问题
关于你的问题,如果你使用继承,你就不能。子类只能调用直接超类构造函数,并且子类只能调用超类构造函数。Ref. http://www.mathworks.com/help/techdoc/matlab_oop/brenzg6.html
像这样公开超类确实破坏了继承的基础。如果您需要这种访问权限,也许您应该考虑另一种模型,也许是组合(“有一个”而不是“是一个”)?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)