文档

抽象类

抽象类

抽象类对于描述一组类的公共功能非常有用,但在每个类中需要唯一的实现。

抽象类术语

抽象类作为一组相关子类的基类(即超类)。抽象类可以定义子类实现的抽象属性和方法。每个子类都可以以支持其特定需求的方式实现具体的属性和方法。金宝app

实现一个具体子类

子类必须实现所有继承的抽象属性和方法才能成为具体类。否则,子类本身就是一个抽象类。

MATLAB®不强制子类实现具有相同签名或属性的具体方法。

抽象类:

  • 是否可以定义非抽象的属性和方法

  • 通过继承传递它们的具体成员

  • 不需要定义任何抽象成员

将类声明为抽象

一个类是抽象的,当它声明:

  • 摘要类属性

  • 抽象方法

  • 抽象属性

如果抽象类的子类没有为所有继承的抽象方法或属性定义具体实现,那么它也是抽象的。

抽象类

类中将类声明为抽象classdef声明:

classdef(抽象)AbsClass...结束

属性声明的类摘要类属性:

  • 具体子类必须重新定义声明为抽象的任何属性或方法。

  • 抽象类不需要定义任何抽象方法或属性。

当您定义任何抽象方法或属性时,MATLAB会自动设置类摘要属性来真正的

抽象方法

定义一个抽象方法:

方法(抽象)abstMethod (obj)结束

属性的方法摘要方法属性:

  • 不要使用函数结束……块定义抽象方法时,只使用方法签名。

  • 抽象方法在抽象类中没有实现。

  • 具体的子类不需要支持相同数量的输入和输出参数,也不需要使用相同的参数名。金宝app但是,子类在实现它们的方法版本时通常使用相同的签名。

抽象的属性

定义一个抽象属性:

属性(抽象)AbsProp结束

属性的属性摘要财产属性:

  • 类必须重新定义抽象属性摘要属性。

  • 类的具体子类必须使用相同的值SetAccess而且GetAccess属性作为抽象超类中使用的属性。

  • 抽象属性不能定义访问方法,也不能指定初始值。定义具体属性的子类可以创建访问方法并指定初始值。

有关访问方法的详细信息,请参见属性访问方法

判断一个类是否抽象

类来确定类是否抽象摘要其属性meta.class对象。例如,AbsClass定义两个抽象方法:

classdefAbsClass方法(摘要)result = absMethodOne(obj) output = absMethodTwo(obj)结束结束

属性的逻辑值meta.class摘要属性来确定类是否抽象:

mc = ?如果~ mc。摘要不是抽象类结束

显示抽象成员名

使用meta.abstractDetails函数显示抽象属性或方法的名称以及定义类的名称:

meta.abstractDetails (“AbsClass”);
类AbsClass的抽象方法:absMethodTwo %定义在AbsClass中absMethodOne %定义在AbsClass中

查找继承的抽象属性和方法

meta.abstractDetails函数返回未在子类中实现的任何继承的抽象属性或方法的名称和定义类。如果您希望子类是具体的,并且必须确定子类继承哪些抽象成员,请使用此函数。

类的子类AbsClass在前一节中定义的类。在这种情况下,子类只实现了定义的抽象方法之一AbsClass

classdefSubAbsClass < AbsClass%不实现absMethodOne在AbsClass中定义为抽象方法函数out = absMethodTwo(obj)...结束结束结束

确定是否使用实现了所有继承类成员meta.abstractDetails

meta.abstractDetails (? SubAbsClass)
类SubAbsClass的抽象方法:AbsClass中定义的absMethodOne %

SubAbsClass类是抽象的,因为它没有实现absMethodOne中定义的方法AbsClass

msub = ?msub。摘要
Ans = 1

中定义的两个方法AbsClass,子类变成具体的。

相关的话题