【问题标题】:Modifying subclass properties with superclass function in Matlab在 Matlab 中使用超类函数修改子类属性
【发布时间】:2013-08-01 11:36:16
【问题描述】:

我的子类与我的超类具有相同的属性。 如下所示

classdef superclass < handle
    properties
      a
      b
      c
    methods
      function sup = superclass(...)
          sup.create(...)
      end

classdef subclass < superclass
    properties
      a1
      b1
      c1
    methods
      function sub = subclass(...)

现在我想让子类的构造函数先初始化超类的属性

    sub@superclass()

然后(这就是我被卡住的地方)子类构造函数第二次初始化所有值 a1、b1、c1。 由于初始化属性的过程在 sup 和 sub 之间没有变化,我想像这样重用它:

    function sub = subclass(args1, args2)
       sub@superclass(args1)
       sub.create(args2)

如何在不为子类编写新的“创建”函数的情况下实现这一点?

【问题讨论】:

    标签: matlab oop inheritance


    【解决方案1】:

    一种可能性是重构 create 方法以返回三个值(而不是硬编码属性),然后您可以在超类和子类中调用它:

    [sup.a,sup.b,sup.c] = sup.create(...);
    

    [sub.a1,sub.b1,sub.c1] = sub.create(args2);
    

    在哪里

    classdef superclass < handle
        methods (Access = protected)
            function [x,y,z] = create(obj, args)
                x = ..; y = ...; z = ...;
            end
        end
    end
    

    或者,您也许可以使用动态字段名称来抽象该部分:

    propname = 'a';
    obj.(propname) = 0;
    

    并让create 方法接收一个包含要填充的属性名称的字符串元胞数组。

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 2013-12-12
      • 2021-03-13
      • 2011-02-13
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多