【问题标题】:Change property of superclass from subclass从子类更改超类的属性
【发布时间】:2017-04-18 16:13:26
【问题描述】:

我认为这是一个非常基本的问题,但我被困在这个问题上。在 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 = obj@super();
          obj.change_color();
      end
   end
end

接下来我做了:

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

但结果是,我没有更改超类的属性,而是更改了子类中继承的属性。我明白了:

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

但我想要:

super_obj.color = 'blue';

提前致谢。

【问题讨论】:

  • 您只能更改当前实例的color属性。如果您创建两个 sub 实例,它们将具有独立的颜色。
  • 但是不存在从继承的子类中更改超类属性的可能性吗?
  • 没有。继承只有一个方向是有充分理由的。如果您有两个子类想要将颜色更改为两个不同的值怎么办?

标签: matlab class oop inheritance


【解决方案1】:

这是不可能的,因为继承流向一个方向:从超类到子类。这是有充分理由的,因为如果您有两个子类都试图将超类的 color 属性修改为两个不同的东西,您认为会发生什么?

此外,如果您有两个子类实例,则在其中一个中更改 color 属性不会更改另一个中的 color 属性,因为每个实例都与另一个实例分离。

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

sub1.change_color();

sub1.color
%   'blue'

sub2.color
%   'red'

如果您希望所有实例都像这样链接,那么您可能希望它们成为对相同实例的引用,您应该使用singleton design pattern 来完成此操作。尽管如此,这仅适用于同一类的对象,不会影响超类。

【讨论】:

  • 感谢您的详细解释。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2017-07-29
  • 2020-11-10
相关资源
最近更新 更多