oop - 在 MATLAB 中覆盖父类(super class)方法和访问修饰符

标签 oop matlab inheritance overriding access-modifiers

考虑以下简单的类层次结构:

上午

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 类,应该将 protected foo 方法重写为公共(public)方法。

如果我们尝试实例化派生类,我们会得到以下错误:

>> b=B();
Error using B
Method 'foo' in class 'B' uses different access permissions than its superclass 'A'. 

奇怪的是,如果 foo 被定义为父类(super class) A 中的私有(private)方法,那么当我们调用重写的方法时代码工作正常:

>> clear classes
>> b=B(); b.foo()
class B

那么这是 MATLAB OOP 实现中的限制/错误,还是这种行为背后有充分的理由? (代码在 R2012b 上测试)


作为比较,在 Java 中,规则规定您不能降低子类中方法的可见性,但可以增加它,其中:

(weakest) private < package < protected < public (strongest)

最佳答案

这似乎是 Matlab 的局限性。我已经尝试了所有属性组合。只要属性不同,Matlab 就会抛出错误,除非 A 的方法是私有(private)的,在这种情况下,B 中的属性无关紧要。

enter image description here

换句话说,除非A中的方法是私有(private)的,否则A和B中方法的属性必须相同。我想这在某种程度上确实有意义,因为 TMW 说“如果一个方法对子类可见,则属性必须相同;如果一个方法对子类不可见,则子类可以为所欲为”。

关于oop - 在 MATLAB 中覆盖父类(super class)方法和访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452674/

相关文章:

javascript - 如何扩展javascript类

actionscript-3 - 异步应用程序设计

python - 在Python中复制复合对象

matlab - 将函数定义为 x,y 数据的插值

matlab - 在 MATLAB 中绘图并保存为文件

java - java子类中的共享变量

c - 什么是纯C中的类

php - 如何从变量名动态设置对象的属性?

algorithm - 什么是最新最好的人脸识别算法?

Java 8 : Better to extend class of static methods or better to call static methods directly?