我的子类与我的超类具有相同的属性。 这看起来像以下
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)
如何在不为子类编写新的“创建”函数的情况下实现此目的?
答案 0 :(得分:2)
一种可能性是重构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
方法接收包含要填充的属性名称的字符串的单元格数组。