我多次遇到过这个问题,我希望最终解决这个问题.
上下文
在MATLAB中创建异构类层次结构时,有一个名为getDefaultScalarElement的受保护静态方法,它允许您定义用于创建数组的默认标量对象.如果层次结构的元素是抽象的,则可以覆盖该方法以使用其他类.
例如
classdef (Abstract) AbstractRoot < matlab.mixin.Heterogeneous
methods (Static, Access = protected)
function DefaultObj = getDefaultScalarElement()
DefaultObj = ConcreteSubclass1();
end
end
end
classdef ConcreteSubclass1 < AbstractRoot
end
classdef ConcreteSubclass2 < AbstractRoot
end
matlab中的每个具体类都有一个名为empty的公共静态隐藏方法,它创建一个该对象的空数组.我想为抽象类创建一个空方法,它的功能与getDefaultScalarObject方法类似.这将允许我调用AbstractRoot.empty()并接收默认类型的空数组.
例如:
classdef (Abstract) AbstractRoot < matlab.mixin.Heterogeneous
methods (Static, Hidden)
function EmptyObj = empty()
EmptyObj = ConcreteSubclass1.empty();
end
end
methods (Static, Access = protected)
function DefaultObj = getDefaultScalarElement()
DefaultObj = ConcreteSubclass1();
end
end
end
不幸的是,这不起作用(无限递归).我遇到的主要问题是我不知道如何覆盖空,仍然能够从子类调用它的内置版本,因为空不是从任何地方继承的
问题
>是否可以调用内置版本的空?如果是这样,怎么样?
>是否有一种在抽象基类中重写空的方法,以便子类仍然可以调用内置版本的空.同样,我可以从方法内部检查调用哪个版本的静态方法(例如’AbstractRoot.empty’或’ConcreteSubclass1.empty’),所以我可以根据具体情况处理它?