Абстрактный суперкласс для подкласса с ручкой и без него - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно знать, есть ли способ в 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. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы должны быть в состоянии сделать:

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 как Abstract абстрактным методом foo. Так что AA и B должны оба реализовывать foo. Вы также помечаете A как HandleCompatible, что означает, что подклассы могут быть дескрипторами.

Тогда AA наследует от A и handle, но B наследует только от A и является классом значений. Оба реализуют foo.

Обратите внимание, что вам, возможно, придется позаботиться о том, как вы реализуете foo в каждом классе, поскольку сигнатура необходимой функции может варьироваться в зависимости от класса дескриптора и значения.

...