文章目录
在 Matlab 中定义一个名为 classname 类,需要在类名之前用 classdef
关键字来声明,并以 end
结束类的定义。classdef
语句之前除了空行和注释不能有其它代码,代码需要保存在与类名相同的 m 文件中,即 classname.m 文件。
定义类的文件可以放在 MATLAB 搜索路径下的文件夹中,也可以放置在搜索路径文件夹内的类文件夹。类文件夹的名字以 @ 开头,加上类的名字(如 @myclass)。更多信息参考Class Files and Folders.
1. 语法
classdef classname
properties
PropName
end
methods
methodName
end
events
EventName
end
enumeration
EnumName
end
end
2. 说明
MATLAB 以代码块来组织类的声明与定义,下面分别介绍。
2.1 classdef 代码块
classdef 代码块内包含了类定义的全部元素,包含在一个以类名为文件名的m文件中。其结构为:
classdef (ClassAttributes) ClassName < SuperClass
…
end
2.1.1 ClassAttributes
ClassAttributes 代表类的属性,其可选的属性和值如下:
属性 | 可选值 | 说明 |
---|---|---|
Abstract | true,false (default = false) | 当设定为 true 表示该类是一个抽象类,不能被实例化。 更多信息见 Abstract Classes |
AllowedSubclasses | meta.class 对象或者是 meta.class 对象的元包向量 | 列表中给出了可以继承该类的 meta.class 对象。 类名前使用 ? 来指定meta.class对象。更多信息见 Specify Allowed Subclasses |
ConstructOnLoad | true,false (default = false) | 当设为 true,MATLAB 会在从 MAT 文件中加载对象时调用构造函数。因此,应用构造函数不会在无参数调用时产生错误。 更多信息见 Initialize Objects When Loading |
HandleCompatible | true,false (default = false) | 当设为 true,这个类可以作为句柄类的父类。所有句柄类都是句柄兼容的。 更多信息见 Support Both Handle and Value Subclasses |
Hidden | true,false (default = false) | 当设为 true,类不会出现在 superclasses 或 help 函数的输出结果中。 |
InferiorClasses | meta.class 对象或者是 meta.class 对象的元包向量 | 使用该属性来确定在类中的优先等级。使用? 来指定 meta.class 对象元包向量。基本类总是比用户定义的优先等级高,不列在列表中。 更多参考Class Precedence 和 Dominant Argument in Overloaded Graphics Functions |
Sealed | true,false (default = false) | 当设定为 true,该类不能被继承。 |
说明:
- 类属性不能被继承,所以父类的属性不会影响到子类。
- 在括号中指定属性值,多个属性之间采用逗号分隔,如:
classdef (Attribute1 = value1, Attribute2 = value2,…) ClassName
…
end
2.1.2 SuperClass
SuperClass 为继承的类名字,如果要继承多个类,类与类之间用 &
连接。