使用 Matlab R2012a,我有以下类层次结构:
classdef Parent < handle
properties (Abstract, SetAccess = protected)
Limit
end
end
classdef SimpleChild < Parent
properties (SetAccess = protected)
Limit = 1.0
end
end
classdef ExtendedChild < Parent
properties (Access = private)
Child = SimpleChild
end
properties (Dependent, SetAccess = protected)
Limit
end
methods
function this = ExtendedChild
this.Limit = 2;
end
function output = get.Limit(this)
output = this.Child.Limit;
end
function set.Limit(this,input)
this.Child.Limit = input;
end
end
end
这是一个简单的示例,其中“Parent”类定义了一个抽象的“Limit”属性,该属性在“SimpleChild”和“ExtendedChild”类中都实现了。“ExtendedChild”类在“SimpleChild”类上封装了一个私有实例,并将访问方法(get/set)转发给私有实例。构造“ExtendedChild”实例失败并显示以下消息:
>> obj = ExtendedChild
Setting the 'Limit' property of the 'SimpleChild' class is not allowed.
Error in ExtendedChild/set.Limit (line 16)
this.Child.Limit = input;
Error in ExtendedChild (line 10)
this.Limit = 2;
我本来希望“限制”属性是可设置的,因为它是在“父”类中定义的,具有受保护的 SetAccess。如果属性直接在“父”类中实现,我可以使问题消失,但是我不能在“ExtendedChild”类中将其重新定义为依赖,这是构造的重点(接口和实现的分离)。
有人可以告诉我我做错了什么吗?