我的问题与Java有关,但它也可以应用于C#。我想知道为什么每个人都建议创建实例变量private而不是制作它们受保护的.
我们想一想。子类看不到私有变量,因此如果我需要访问或更改子类中超类的变量,我被迫使用一些访问器和修改器方法,例如getMyPrivateVariable
or setMyPrivateVariable
。但是,当您扩展某个类并继承其成员时,这就像您直接在子类中声明它们一样。因此从逻辑上讲,这意味着子类也应该能够直接访问实例变量,并为设计带有受保护变量的类提供了理由。我知道这种做法会破坏封装,但这在继承的情况下似乎无关紧要,因为在这种情况下,一切都像超类的成员在子类中声明一样,因此子类具有“自然权利”能够直接访问其成员,无论它们是否是继承的。在我看来,封装对于对象继承树之外的其他对象与对象的接口更为重要。
所以,我的问题是为什么每个人都建议将类的实例变量声明为私有而不是受保护?
你自己回答这个问题——封装。
例如,您有一个抽象 Cat 类。这定义了成员变量速度 - 即它的运行速度。
抽象类还定义了一个最终的 run 方法,它显然会更新速度。
现在 - 如果 Cat 的子类 - 例如Moggy或Tabby可以直接访问和修改“速度”,然后它可能会破坏run方法。
所以最好把它绑在开始的地方。如果需要,您也可以在本地声明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)