Matlab中抽象类和类成员
目录
抽象类和类成员
抽象类
将类声明为抽象类
确定类是否为抽象类
查找继承的抽象属性和方法
抽象类和类成员
抽象类
抽象类十分适用于描述一组类所共有的功能,但需要在每个类中有唯一的实现。
抽象类术语:
- 抽象类 - 无法实例化但定义子类使用的类组件的类。
- 抽象成员 - 在抽象类中声明但在子类中实现的属性或方法。
- 具体类 - 可以实例化的类。具体类不包含抽象成员。
- 具体成员 - 由类完全实现的属性或方法。
- 接口 - 一种抽象类,它描述一组类所共有的功能,但需要在每个类中有唯一的实现。抽象类定义每个子类的接口,而不指定实际实现。
- 抽象类作为一组相关子类的基础(即超类)。抽象类可以定义子类实现的抽象属性和方法。每个子类都可以以支持其特定要求的方式实现具体的属性和方法。
实现具体子类
子类必须实现所有继承的抽象属性和方法才能成为具体类。否则,子类本身就是抽象类。
MATLAB® 不强制子类使用相同签名或属性实现具体方法。
抽象类:
可以定义非抽象的属性和方法
通过继承传递其具体成员
不需要定义任何抽象成员
将类声明为抽象类
当类做出以下声明时为抽象类:
声明 Abstract 类属性
声明抽象方法
声明抽象属性
如果抽象类的子类没有为所有继承的抽象方法或属性定义具体实现,该子类也是抽象类。
抽象类
在 classdef 语句中将类声明为抽象类:
classdef (Abstract) AbsClass ...
end
对于声明 Abstract 类属性的类:
具体子类必须重新定义声明为抽象的任何属性或方法。
抽象类不需要定义任何抽象方法或属性。
定义任何抽象方法或属性时,MATLAB 会自动将类 Abstract 特性设置为 true。
抽象方法
定义抽象方法:
methods (Abstract)abstMethod(obj)
end
对于声明 Abstract 方法属性的方法:
不要使用 function...end 代码块来定义抽象方法,只能使用方法签名进行定义。
抽象方法在抽象类中没有实现。
具体子类不需要支持相同数量的输入和输出参数,也不需要使用相同的参数名称。不过,子类在实现其方法版本时通常使用相同的签名。
抽象方法无法定义arguments代码块。
抽象属性
定义抽象属性:
properties (Abstract)AbsProp
end
对于声明 Abstract 属性特性的属性:
具体子类必须不用 Abstract 特性重新定义抽象属性。
具体子类必须对 SetAccess 和 GetAccess 属性使用与抽象超类中使用的那些属性相同的值。
抽象属性无法定义访问方法,也无法指定初始值。定义具体属性的子类可以创建访问方法并指定初始值。
确定类是否为抽象类
通过查询 meta.class 对象的 Abstract 属性,确定类是否为抽象类。例如,AbsClass 定义两个抽象方法:
classdef AbsClassmethods(Abstract)result = absMethodOne(obj)output = absMethodTwo(obj)end
end
使用 meta.class Abstract属性的逻辑值来确定类是否为抽象类:
mc = ?AbsClass;
if ~mc.Abstract% not an abstract class
end
显示抽象成员名称
使用meta.abstractDetails函数显示抽象属性或方法的名称以及定义类的名称:
meta.abstractDetails('AbsClass');Abstract methods for class AbsClass:absMethodTwo % defined in AbsClassabsMethodOne % defined in AbsClass
查找继承的抽象属性和方法
meta.abstractDetails函数返回尚未在子类中实现的任何继承的抽象属性或方法的名称和定义类。如果需要子类是具体类并且必须确定子类继承哪些抽象成员,请使用此函数。
例如,假设创建在上一节中定义的 AbsClass 类的子类。在本例中,子类只实现 AbsClass 定义的抽象方法之一。
classdef SubAbsClass < AbsClass
% Does not implement absMethodOne
% defined as abstract in AbsClassmethodsfunction out = absMethodTwo(obj)...endend
end
使用 meta.abstractDetails 确定您是否实现了所有继承的类成员:
meta.abstractDetails(?SubAbsClass)Abstract methods for class SubAbsClass:absMethodOne % defined in AbsClass
SubAbsClass 类是抽象类,因为它没有实现在 AbsClass 中定义的 absMethodOne 方法。
msub = ?SubAbsClass;
msub.Abstract
ans =1
如果实现了在 AbsClass 中定义的两个方法,子类将变为具体类。
Matlab中抽象类和类成员相关推荐
- java中number类型能否相除_Java中 如果复数类成员是int型,怎么实现两个复数相除...
(1) 复数类Complex 的属性有: RealPart : int型,代表复数的实数部分 ImaginPart : int型,代表复数的虚数部分 package applet; impor ...
- java 复数的除法_Java中 如果复数类成员是int型,怎么实现两个复数相除
(1) 复数类Complex 的属性有: RealPart : int型,代表复数的实数部分 ImaginPart : int型,代表复数的虚数部分 package applet; impor ...
- java 反射类成员_java 反射(二)类成员
在Java反射的包中定义一个接口java.lang.reflect.Member,它有三个实现类java.lang.reflect.Field, java.lang.reflect.Method, a ...
- matlab计算层次法的权重,层次分析法计算权重在matlab中的实现
信息系统分析与设计作业 层次分析法确定绩效评价权重在matlab中的实现 小组成员:孙高茹.王靖.李春梅.郭荣 1 程序简要概述 编写程序一步实现评价指标特征值lam.特征向量w以及一致性比率CR的求 ...
- 单目相机(Mono camera)在MATLAB中的表示与实例
目录 1 概述 2 单目相机(Mono camera) 2.1 基本概念 2.2 车体坐标系到相机坐标系 2.3 相机坐标系到像素坐标系 2.4 相关类和函数 2.4.1 monoCamera类 2. ...
- Matlab中的类定义 classdef
Matlab也可以写面向对象的代码,首先表现在可以定义类,以及可以继承,使用类(class)有很多好处,其中一个重要的好处便是解决变量名冲突和让函数.对象的结构清晰.class的static func ...
- 在java程序中定义的类有两种成员_java试题 急需答案 谢谢!!!
三.填空(每小题2分,共10分)1.在Applet中,创建一个具有10行45列的多行文本区对象ta的语句为:2.创建一个标识有"关闭"字样的标签对象gb的语句为.3.方法是一种仅有 ...
- scala java抽象理解_Scala学习笔记(五) 抽象类以及类中的一些语法糖
1. 抽象类 Scala 的抽象类跟Java的一样,不能被实例化. 1.1抽象字段 抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化. scala> abstract class ...
- 不同派生方式下基类成员在派生类中的可访问范围属性
不同派生方式下基类成员在派生类中的可访问范围属性 派生方式 派生方式 派生方式 基类成员 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问 不可访问 保护成员 保护 私有 保护 公有成员 公 ...
最新文章
- Python基础总结(3)
- HDU 2079 选课时间
- 会计基础第一章模拟试题(1)
- Guice使用入门以及整合Redis
- vs.net 2005 beta 2安装问题
- 全面控制Windows任务栏
- debian源码编译安装mysql5.6_MySQL 5.6 Linux Debian/Ubuntu源码编译安装 LNMP之MySQL
- python安装idle_怎么在windows下的Python开发工具IDLE里安装其他模块
- 力扣 买卖股票的最佳时机II
- Mysql5.6 自动化部署
- No module named ‘win32com‘
- 英文java简历模板下载_JAVA技术人员英文简历模板
- kotlin中Gson解析Json时对于泛型的应用
- 学科前沿:基因启动子甲基化与宫颈癌发展的关系 | 文献科普
- 手机便签怎么对待办分类文件夹加密
- 20年研发管理经验谈(十七)(终结)
- python小程序之天天向上
- 7月书讯 | 12本新书如期而至!
- 解决2K 显示器的尴尬为MacBook 开启HiDPI(新方法支持M1)
- WKT (Well Known Text)