2015-06-15 117 views
0

我是MATLAB OOP的新手。我有一個抽象類,在我的matlab路徑中定義了一個抽象方法。我在名爲@SubAbsClass的子文件夾中有一個名爲SubAbsClass的子類。在子類中實現抽象方法後,我無法創建子類的對象。這是我的SubAbsClass實現:在matlab中實現抽象方法

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

在方法內部,MATLAB考慮非點引用是本地函數(類文件內的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調用和Static method調用的詳細信息。