В качестве примера предположим, что я создал абстрактный класс с именем Shape
и два подкласса с именами Circle
и Rectangle
, которые оба реализуют (абстрактный) метод с именем Draw
. Я хотел бы иметь возможность создавать несколько объектов Circle
и Rectangle
, хранить их в массиве и вызывать Draw
для каждого объекта массива, перебирая массив.
Я пробовал что-то вроде следующего:
Форма.м:
classdef (Abstract) Shape < handle
methods (Abstract)
Draw(obj);
end
end
Круг.м:
classdef Circle < Shape
methods
function obj = Draw(obj)
disp('This is a circle');
end
end
end
Прямоугольник.м:
classdef Rectangle < Shape
methods
function obj = Draw(obj)
disp('This is a rectangle');
end
end
end
тест.м:
shapes = Shape.empty();
myrect = Rectangle();
mycirc = Circle();
shapes(end + 1) = myrect;
shapes(end + 1) = mycirc;
for i = 1:size(shapes,1)
shapes(i).Draw();
end
Когда я пытаюсь запустить test.m, я получаю следующее сообщение об ошибке:
Error using Shape.empty
Abstract classes cannot be instantiated.
Class 'Shape' defines abstract methods
and/or properties.
Error in test (line 1)
shapes = Shape.empty();