让我们从另一种行为开始:即使您将方法/变量声明为私有,同一类的另一个实例也可以访问它。没关系,我可以忍受它。我称这些为类私有而不是实例私有。
现在是问题部分:例如,在运行时我希望能够检查this
类中的所有 String 变量是否不为空,如果它们为空,则应将其更改为字符串“NULL”。
我可以使用反射来遍历变量并获取它们的值。但是,如果我扩展我的类并添加私有甚至受保护的变量,我的基类将无法访问它们。我必须先setAccessible
了解变量,然后才能使用它们。
所以请向我解释为什么基类(超类)不能从它的子类访问私有/受保护的变量。这是它的子类,所以我不明白。这背后的想法是什么?
我知道超类不应该知道它的子类,但在我的例子中它是有道理的,不是吗?
是因为我不能或不应该以这种方式限制我的子类吗?
更新: 根据答案,我还想知道:为什么不从同一个类访问另一个实例的私有变量被视为违反封装?