在matlab中实现抽象方法

implementing abstract methods in matlab

我是 MATLAB OOP 新手。我有一个抽象 class 在我的 matlab 路径中定义了一个抽象方法。我在名为@SubAbsClass 的子文件夹中有一个名为 SubAbsClass 的 subclass。在 subclass 中实现抽象方法后,我无法创建 subclass 的对象。这是我的 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

我的抽象 class 实现是:

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

当我尝试在 MATLAB 路径中创建一个对象时(抽象 class 在 MATLAB 路径中),我得到一个错误。我尝试了很多配置并搜索了 matlab oop 文档,以及包括 Whosebug 在内的网络,但不幸的是找不到要实施的示例。感谢您的帮助

>> 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);

在一个方法中,Matlab 认为非点引用是对局部函数的调用(在 class 文件中的 classdef 块之外定义)或对以下 Matlab 路径上某处的函数的调用通常的查找规则。

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

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 invocation and Static method 调用的详细信息。