句柄和非句柄子类的抽象超类

Abstract superclass for both handle and non-handle subclass

我想知道在 matlab 中是否有办法为 handle 和非 handle subclass 定义接口 superclass?如果在层次结构中有句柄 class,所有 classes 也必须是句柄,在 matlab 中接口被定义为抽象 class。所以不能这样做。

class A < handle
....
end

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

class B
....
    methods
        function foo
    end
end

我想创建某种带有 classes AA(句柄)和 B(非句柄)的容器,以确保它们都具有函数 foo。有办法吗?

你应该可以做到:

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

在这里,您使用抽象方法 fooA 标记为 Abstract。所以 AAB 都必须实现 foo。您还将 A 标记为 HandleCompatible,这意味着 subclasses 可以是句柄。

那么AA同时继承了Ahandle,但是B只继承了A并且是一个值class。两者都实现 foo.

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