我的问题与 Java 有关,但它也可以应用于 C#。我想知道为什么每个人都建议将实例变量设为private而不是将它们设为protected。
让我们想一想。子类看不到私有变量,所以如果我需要访问或更改子类中超类的变量,我不得不使用一些访问器和修改器方法,例如getMyPrivateVariable
或setMyPrivateVariable
. 但是当您扩展某个类并继承其成员时,这就像您直接在子类中声明它们一样。所以从逻辑上讲,这意味着子类也应该可以直接访问实例变量,并为设计具有受保护变量的类提供了依据。我知道这种做法会破坏封装,但这在继承的情况下似乎无关紧要,因为在这种情况下,一切都像在子类中声明了超类的成员一样,所以子类具有“自然权利”能够直接访问其成员,无论它们是否被继承。在我看来,封装对于通过对象继承树之外的其他对象与对象进行交互更为重要。
所以,我的问题是为什么每个人都建议将类的实例变量声明为私有而不是受保护?