首页 > 解决方案 > 句柄和非句柄子类的抽象超类

问题描述

我需要知道matlab中是否有办法为句柄和非句柄子类定义接口超类?如果在层次结构中有一个句柄类,则所有类也必须是句柄,并且在 matlab 中,接口被定义为抽象类。所以不能以这种方式进行。

class A < handle
....
end

class AA < A
....
    methods 
        function foo
        end
    end
end

class B
....
    methods
        function foo
    end
end

我想创建某种具有 AA(句柄)和 B(非句柄)类的容器,以确保它们都具有函数 foo。有没有办法做到这一点?

标签: matlabinterfaceabstracthandle

解决方案


你应该能够做到:

classdef (Abstract, HandleCompatible) A
    methods (Abstract)
        function foo
    end
end

classdef AA < A & handle
    methods
        function foo
        ...
        end
    end
end

classdef B < A
    methods
        function foo
        ...
        end
    end
end

在这里,您使用抽象方法标记A为。因此,必须同时实施。您还标记为,这意味着子类可以是句柄。AbstractfooAABfooAHandleCompatible

然后AA继承自两者Aand handle,但B仅继承自Aand 是一个值类。两者都实施foo

请注意,您可能需要注意在每个类中实现 foo 的方式,因为必要的函数签名在句柄和值类之间可能会有所不同。


推荐阅读