2016-12-04 11 views
2

これは非常に基本的な質問だと思いますが、私はこれに固執しています。 MATLABには、スーパークラスsuperとサブクラスsubがあります。スーパークラスのプロパティをサブクラスから変更する

今、私のサブクラスのスーパークラスのプロパティcolorを変更しようとしています。だから私はやった次

classdef super < handle 

    properties 
     color = 'red'; 
    end 

    methods 
     function obj = super() 
      % ... 
     end 

     function obj = change_color(obj) 
      obj.color = 'blue'; 
     end 
    end 
end 

この

classdef sub < super 

    properties 
     name = 'car'; 
    end 

    methods 
     function obj = sub() 
      obj = [email protected](); 
      obj.change_color(); 
     end 
    end 
end 

次私は

super_obj = super(); 
sub_obj = sub(); 

をしましたが、結果は、私はスーパークラスのプロパティを変更し、代わりにしていないということであり、サブクラスの継承プロパティが変更されます。

super_obj.color = 'red'; 
sub_obj.color = 'blue'; 

が、私は事前に

super_obj.color = 'blue'; 

感謝をしたい:私は得ます。

+2

*現在のインスタンス*の 'color'プロパティのみを変更できます。 2つの 'sub'インスタンスを作成すると、独立した色になります。 – Suever

+0

しかし、継承されたサブクラス内からスーパークラスのプロパティを変更する可能性はありませんか? – Lemonbonbon

+2

いいえ、理由のために継承は一方向にしか行きません。 2つの異なる値に色を変更したい2つのサブクラスがある場合はどうなりますか? – Suever

答えて

2

スーパークラスからサブクラスに継承が一方向に流れるため、これは不可能です。スーパークラスのプロパティーを2つの異なるものに変更しようとした2つのサブクラスがあったとしたら、どうなるでしょうか?

サブクラスのインスタンスが2つある場合は、colorプロパティを変更すると、各インスタンスが別のインスタンスから分離されているため、他のインスタンスのcolorプロパティを変更することはありません。

sub1 = sub(); 
sub2 = sub(); 

sub1.change_color(); 

sub1.color 
% 'blue' 

sub2.color 
% 'red' 

あなたはすべてのインスタンスは次のようにリンクさせたい場合は、おそらく彼らは同じインスタンスへの参照になりたい、あなたはこれを達成するためにsingleton design patternを使用する必要があります。ただし、これは同じクラスのオブジェクトに対してのみ機能し、スーパークラスには影響しません。

+0

この詳細な説明をいただきありがとうございます。 – Lemonbonbon

関連する問題