Matlab调用超类抽象构造函数语法似乎很奇怪

时间:2015-02-11 20:48:32

标签: matlab inheritance constructor super

我试图从继承类中调用超类构造函数。 matlab documentation中的官方语法是:

  

obj = obj@SuperClass(ArgumentList);

然而,编辑似乎警告说:

  

变量`obj`可能在定义之前使用。

此外,如果我尝试运行代码,我会收到错误"" @"的左操作数必须是方法名称。"

可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

我发现这是子类构造函数名称的拼写错误的结果。问题的最小重建如下:

classdef SuperDemo  < handle
    methods
        function obj = SuperDemo(opt)
            disp(['in super ', opt])
        end
    end
end

classdef SubDemo < SuperDemo
    methods
        function obj = SubDemoo(opt) % NOTICE THE TYPO SubDemoo 
            disp(['in sub ', opt])
            obj = obj@SuperDemo(opt);
        end
    end
end

如果您致电s = SubDemo('hello'),您将收到错误消息:

  

使用SubDemo时出错错误:文件:SubDemo.m行:5列:19“@”   在方法中,调用同名的超类方法   说方法@超类。 “@”的左操作数必须是方法   名。

此错误具有误导性,因为左操作数为obj而非SubDemo。 错误消息应该表明构造函数名称SubDemoo与类名SubDemo不同。