1

假设我有这个课程:

classdef abstractGame
    %UNTITLED Summary of this class goes here
    %   Detailed explanation goes here

    properties
    end

    methods (Abstract, Static)
        run(gambledAmount);
    end

    methods (Static)
        function init()
            gambledAmount = validNumberInput(abstractGame.getGambleString(), 1, 100, 'helpText', 'round');
        end
        function str = getGambleString()
            str = 'How much do you want to gamble?';
        end
    end

end

其他类从这个类扩展而来。我希望子类重新定义 getGambleString 方法,并让 init 方法使用最深的类定义的方法(而不是 abstractGame.[...] 我想要类似 calledClass.[...] 的东西)。

我该怎么称呼它?提前致谢。

4

1 回答 1

1

那是一个static virtual功能问题;但是,即使在 C++中也不存在这样的构造,那么我在 matlab 中没有机会拥有它。(virtual函数定义。)

顺便说一句,在 matlab 中,非静态方法的行为是虚拟的(就像在 Java 中一样),因此,如果您接受不使用静态函数,则可以获得所需的效果。

证明(简化代码):

classdef abstractGame
  function str = init(obj)
        str = getGambleString(obj);
    end
    function str = getGambleString(obj)
        str = 'How much do you want to gamble?';
    end
  end
end


 classdef game < abstractGame
  methods 

    function str = getGambleString(obj)
        str = 'Hi!';
    end
  end    
 end


d = game;

d.init()

  ans =

   Hi!
于 2012-11-22T14:48:01.833 回答