在Java中,为什么超类方法不能从子类实例访问受保护或私有方法/变量?

2023-11-23

让我们从另一种行为开始:即使您将方法/变量声明为私有,同一类的另一个实例也可以访问它。没关系,我可以忍受。我将这些称为类私有而不是实例私有。

现在问题部分: 例如,在运行时我希望能够检查所有字符串变量thisclass 不为 null,如果为 null,则应将其更改为字符串“NULL”。

我可以使用反射遍历变量并获取它们的值。但是,如果我扩展我的类并添加私有变量甚至受保护的变量,我的基类将无法访问它们。我必须setAccessible在我可以使用变量之前。

因此,请向我解释为什么基类(超类)无法从其子类访问私有/受保护的变量。它是它的子类,所以我不明白。这背后的想法是什么?

我知道超类不应该知道它的子类,但在我的例子中这是有道理的,不是吗?

是因为我不能或不应该以这种方式限制我的子类吗?


Update:根据答案,我还想知道:为什么从同一类访问另一个实例的私有变量不被视为违反封装?


很简单,因为它违反了封装性。即使您概括了该类,另一个类也不应该能够进入您的类并搞乱事情。例如,车辆如何了解汽车的信息?基类的全部要点是为子类提供服务,但就像过度保护的父类一样,您的建议会太多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Java中,为什么超类方法不能从子类实例访问受保护或私有方法/变量? 的相关文章

随机推荐