Помислете за следната проста йерархия на класовете:
A.m
classdef A < handle
methods (Access = protected) %# protected vs. private
function foo(obj)
disp('class A')
end
end
end
B.m
classdef B < A
methods (Access = public)
function foo(obj)
disp('class B')
end
end
end
Клас B наследява от клас A и се предполага, че замества защитения foo
метод като публичен.
Ако се опитаме да инстанцираме производния клас, получаваме следната грешка:
>> b=B();
Error using B
Method 'foo' in class 'B' uses different access permissions than its superclass 'A'.
Странното е, че ако foo
е дефиниран като частен метод в суперкласа A
, кодът работи добре, когато извикаме заменения метод:
>> clear classes
>> b=B(); b.foo()
class B
И така, това ограничение/бъг в изпълнението на MATLAB OOP ли е или има добра причина зад това поведение? (Кодът е тестван на R2012b)
За сравнение, в Java правилата гласят, че не можете да намалите видимостта на метод в подкласа, но можете да я увеличите, където:
(weakest) private < package < protected < public (strongest)