在matlab中实现抽象方法

时间:2015-06-15 21:09:18

标签: matlab oop methods subclass abstract

我是MATLAB OOP的新手。我有一个抽象类,在我的matlab路径中定义一个抽象方法。我在名为@SubAbsClass的子文件夹中有一个名为SubAbsClass的子类。在子类中实现抽象方法后,我无法创建子类的对象。这是我的SubAbsClass实现:

classdef SubAbsClass < AbsClass

    properties
        O1
    end

methods
        function obj=SubAbsClass(a,b)
            obj.O1=absMethod(a,b);
        end
    end
    methods (Static)

        function out = absMethod(a,b)
            out = a + b;
        end
    end
end

我的抽象类实现是:

classdef AbsClass
    methods(Abstract, Static)
        result = absMethod
    end
end

当我尝试在MATLAB路径中创建一个对象(抽象类在MATLAB路径中)时,我收到一个错误。我已经尝试了很多配置并搜索了matlab oop文档,还搜索了包含stackoverflow的web,但遗憾的是无法找到实现的示例。感谢您的帮助

>> clear all; clear classes;
>> obj=SubAbsClass(5,2)
Undefined function 'absMethod' for input arguments of type 'double'.

Error in SubAbsClass (line 11)
            obj.O1=absMethod(a,b);

1 个答案:

答案 0 :(得分:1)

在一个方法中,Matlab认为非点引用是对本地函数的调用(在类文件中的classdef块之外定义)或者是遵循常规查找规则的Matlab路径上的某个函数

所以你需要通过构造函数中的实例Static调用obj方法:

methods
    function obj = SubAbsClass(a,b)
        obj.O1 = obj.absMethod(a,b);
    end
end

对上述内容的一点警告是,非Static方法也具有功能形式。 所以如果方法不是Static ,那么这种表示法也可以起作用

methods
    function obj = SubAbsClass(a,b)
        obj.O1 = absMethod(obj,a,b);
    end
end

我认为,它几乎相当于点符号,虽然据说是"generally" faster(虽然是四年前)。

以下是ordinary method调用和Static method调用的详细信息。