2015-10-05 95 views
0

我正在编写一些使用MATLAB面向对象编程的代码,尝试构建系统模拟器。MATLAB:使子类实例的属性只能从父类修改

我想创建一个代表完整系统的类。该系统依赖于2个子模块:发射器和接收器。

这两个模块我也使用类实现,因为它们可能会在其他未来的场景中有用。

我的问题是,我希望发送器和接收器的一些属性只有在创建为独立实例时才具有(SetAccess = public),而不是从系统类创建。这是因为当完整系统的一部分时,不应该在用户单独的模块上完成更改。

我试图把(SetAccess =保护)到发射器和接收器的情况下,在我的系统类,但是这并不妨碍我做例如从commandwindow改变其参数: system.transmitter.memory = value

有没有什么方法可以让我在不创建发射器和接收器类的不同定义的情况下实现这样的行为?

我对OOP相当陌生,所以让我知道如果这我想实现的行为是错误的。

编辑:我只是把(SetAccess =保护),因为我想我的孩子级的属性是可读的,但不可写

回答

0

您需要同时设置SetAccess和GetAccess的作为保护。操作

system.transmitter.memory = value; 

首先获得您拥有公共GetAccess的,然后设置上具有记忆性的公共访问变送器的存储属性的属性发射机。

仅设置系统中的SetAccess仅停止变送器属性的公共设置。所以,

system.transmitter = Transmitter; 

会抛出错误。

+0

感谢您的回复。所以我认为不可能让子类可读取但不可写入? 因为这是我一直在寻找的行为。 –

+0

是的。处理类就是这种情况。一旦你拿到手柄,它可以改变。解决方法是在系统中创建get.transmitter方法,并使其返回发送器实例的新副本。 – Navan

+0

好的谢谢澄清。我想我只是创建一个包含单独的模块实例的封装,并在系统类中使用封闭的写访问权限。 –