3

サブクラスにはスーパークラスと同じプロパティがあります。これは次のようになります

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()

次に(これが私が立ち往生している場所です)サブクラスコンストラクターが2番目にすべての値a1、b1、c1を初期化します。プロパティを初期化する手順は sup と sub で変わらないので、次のように再利用したいと思います。

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

サブクラスの新しい「作成」関数を作成せずに、どうすればこれに到達できますか?

4

1 に答える 1

2

1 つの可能性は、(プロパティをハードコーディングする代わりに) 3 つの値を返すようにメソッドをリファクタリングする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、入力するプロパティ名を含む文字列のセル配列を受け取ります。

于 2013-08-01T12:47:18.400 に答える