多重继承很好理解,举个例子,Sub既属于Base1类,又属于Base2类,具有两个类的特性,那么就需要多重继承,下面是代码:

classdef Base1 % Base1.m
    properties
        x
    end
    methods
        function obj = Base1()
            disp('Base1');
        end
    end
end
classdef Base2 % Base2.m
    properties
        y
    end
    methods
        function obj = Base2()
            disp('Base1');
        end
    end
end
classdef Sub < Base1&Base2 % Sub.m
    properties
        z
    end
    methods
        function obj = Sub()
            disp('Sub')
        end
    end
end
  • 多重继承需要特别注意的一点就是同名属性和同名方法的处理,如果子类中重新定义了方法,那么直接调用时会调用子类的方法,但是可以通过 方法名@类名的形式可以调用父类同名方法,在子类中可以访问所有基类的属性。
  • 如果说基类中也有同名属性和同名方法,那么必须至多有一个公有属性,否则就会产生歧义。
  • 构造函数按照继承的顺序来调用,如下:

如果直接继承一个Value类和Handle类会出现错误,需要在Value类的定义中加入HandleCompatible,如下:classdef (HandleCompatible) Base2

  • 禁止类的继承可以在classdef后面加上(Sealed),或者将构造函数声明成private。