gpt4 book ai didi

java - 在 Java 中,为什么父类(super class)方法不能从子类实例访问 protected 或私有(private)方法/变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:38 25 4
gpt4 key购买 nike

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

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

我可以使用反射遍历变量并获取它们的值。但是,如果我扩展我的类并添加私有(private)或什至 protected 变量,我的基类将无法访问它们。我必须先对变量进行 setAccessible,然后才能使用它们。

所以请向我解释为什么基类(父类(super class))不能从其子类访问私有(private)/ protected 变量。这是它的子类,所以我不明白。这背后的想法是什么?

我知道父类(super class)不应该知道它的子类,但在我的例子中这是有道理的,不是吗?

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


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

最佳答案

它很简单,因为它违反了封装。另一个类(class)不应该进入你的类(class)并乱搞事情,即使你概括了那个类(class)。例如,Vehicle 如何知道关于 Car 的任何信息?基类的全部意义在于为子类提供服务,但就像过度保护的 parent 一样,您的建议会太多。

关于java - 在 Java 中,为什么父类(super class)方法不能从子类实例访问 protected 或私有(private)方法/变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/899414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com