考虑以下简单的类层次结构:
这是MATLAB面向对象实现的一个限制/bug,还是这种行为背后有充分的理由?(代码在R2012b上测试过)
相比之下,在Java中,规则规定您不能在子类中减少方法的可见性,但可以增加可见性,其中:
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面向对象实现的一个限制/bug,还是这种行为背后有充分的理由?(代码在R2012b上测试过)
相比之下,在Java中,规则规定您不能在子类中减少方法的可见性,但可以增加可见性,其中:
(weakest) private < package < protected < public (strongest)