主要内容

修改继承的方法

何时修改超类方法

类设计使您能够将子类对象传递给超类方法。超类方法可以正确执行,因为子类对象是超类对象。然而,子类可以实现它们自己版本的超类方法®传递子类对象时调用。

当需要在子类中提供专门的行为时,子类会覆盖继承的方法(即实现同名的方法)。下面是一些覆盖超类方法的模式。

  • 通过在子类方法中调用超类方法来扩展超类方法。除了调用超类方法外,子类方法还可以执行特定于子类的处理。

  • 在超类方法中,使用受保护的方法实现过程中的一系列步骤。然后,通过重新定义从公共超类方法中调用的受保护方法,在子类方法中重新实现这些步骤。

  • 重新定义子类中的同名方法,但使用不同的实现对子类对象执行不同的操作。

  • 在子类中实现抽象超类方法。抽象超类可以定义没有实现的方法,并依赖于子类来提供实现。有关更多信息,请参见定义一个接口超类

重写超类方法的子类方法必须为类定义相同的值访问属性,如超类方法所定义的。

扩展超类方法

从子类方法调用同名超类方法使您能够为子类对象扩展超类方法,而不影响超类方法。

例如,假设父类和子类都定义了一个方法称为喷火.子类方法调用超类方法并执行除了调用超类方法之外的其他步骤。子类方法可以操作不属于超类的子类的专门化部分。

例如,这个子类定义了一个喷火调用超类的方法喷火方法

classdefSub < Super方法函数foo (obj)预处理步骤%...foo@Super (obj);%后处理步骤...结束结束结束

在子类中重新实现超类过程

超类方法可以定义在一系列步骤中执行的流程,每个步骤使用一个方法(通常访问属性设置为受保护的对于步骤方法)。此模式(称为模板方法)允许子类创建它们自己版本的受保护方法,这些方法实现流程中的各个步骤。这个过程是专为子类设计的。

实现这个技术,如下所示:

classdef超级方法(密封)函数foo (obj) step1 (obj)%呼叫step1步骤2 (obj)%呼叫step2步骤3 (obj)%呼叫step3结束结束方法(访问=受保护)函数step1 (obj)%超类版本结束函数步骤2 (obj)%超类版本结束函数步骤3 (obj)%超类版本结束结束结束

的子类不重写喷火方法。相反,它只覆盖执行一系列步骤的受保护方法(step1 (obj)步骤2 (obj)步骤3 (obj)).这种技术使子类能够专门化每个步骤所采取的操作,但不能控制流程中步骤的顺序。当将子类对象传递给超类时喷火方法,MATLAB调用子类步进方法,因为调度规则。有关方法调度的更多信息,请参见方法调用

classdefSub < Super...方法(访问=受保护)函数step1 (obj)%子类版本结束函数步骤2 (obj)%子类版本结束函数步骤3 (obj)%子类版本结束...结束结束

重定义超类方法

可以在子类中完全重新定义超类方法。在这种情况下,父类和子类都将定义同名的方法。但是,实现是不同的,子类方法不会调用超类方法。当同一个操作在超类和子类上需要不同的实现时,创建同名方法的独立版本可能是必要的。

classdef超级方法函数foo (obj)超类实现结束结束结束
classdefSub < Super方法函数foo (obj)子类实现结束结束结束

在子类中实现抽象方法

抽象方法没有实现。继承抽象方法的子类必须提供特定于子类的实现,以便子类成为具体类。有关更多信息,请参见抽象类和类成员

classdef超级方法(抽象)foo (obj)没有实现的抽象方法结束结束
classdefSub < Super方法函数foo (obj)具体方法的子类实现。结束结束结束

相关的话题

Baidu
map