代码之家  ›  专栏  ›  技术社区  ›  Marc

Matlab子类化问题

  •  3
  • Marc  · 技术社区  · 17 年前

    classdef Table < Base
    
    properties (SetAccess = protected, GetAccess = public)
        PropA = [];
    end %properties
    

    classdef subTable < Table
    
    ...
    methods (Access = private)
        out = get.PropA(obj, value);
    end %private methods
    

    然而,在帮助中,它说:“你必须在一个不指定属性的方法块中定义属性访问方法。”这个想法到此为止。

    有什么想法吗?

    1 回复  |  直到 17 年前
        1
  •  4
  •   SCFrench    17 年前

    我不相信这是可能的。自 MATLAB Documentation :

    只有两个条件允许您重新定义超类属性:

    • 超类属性Abstract属性设置为true
    • 超类属性的SetAccess和GetAccess属性都设置为private

    我也不认为这样做是个好主意。它违反了 Liskov Substitution Principle .为接受表而编写的函数也应该能够接受子表并正常工作。如果这样的函数访问了PropA,则在传递子表时会失败。