Java 使私有字段在继承的子类中可见

Java 使私有字段在继承的子类中可见,java,inheritance,encapsulation,superclass,Java,Inheritance,Encapsulation,Superclass,我对Java相当陌生,所以我认为我的问题会相当幼稚 对于我的一个项目,我决定用Java编写代码,我想使用封装和继承概念 简而言之,我想知道是否有机会使超类中的私有字段在子类中以某种方式可见,尽管用户仍然无法访问?听起来您在描述受保护的 请参阅Java教程。您可以使超类中的字段受保护,而不是私有字段。这将使子类和同一包中的其他类都可以访问字段,但不会访问世界 您可能会发现本教程很有帮助:简而言之,这是不可能的。最接近的选项是使其受到保护,但现在该字段可以从同一个包中的其他类访问,即使它们不扩展超类

我对Java相当陌生,所以我认为我的问题会相当幼稚

对于我的一个项目,我决定用Java编写代码,我想使用封装继承概念


简而言之,我想知道是否有机会使超类中的私有字段在子类中以某种方式可见,尽管用户仍然无法访问?

听起来您在描述受保护的


请参阅Java教程。

您可以使超类中的字段受保护,而不是私有字段。这将使子类和同一包中的其他类都可以访问字段,但不会访问世界


您可能会发现本教程很有帮助:

简而言之,这是不可能的。最接近的选项是使其受到保护,但现在该字段可以从同一个包中的其他类访问,即使它们不扩展超类

另一个选项是使用反射从子类访问这些字段,但这会非常糟糕。

您有两个选项

  • 将中的私有访问修改器更改为至少受保护。但是如果您这样做,变量可以在包内访问。不仅仅是子类

  • 在父类中为私有变量定义get方法,并在子类中使用super.getX()。此外,您可以将get-method-access修饰符设置为protected,以避免从包外部的类访问get-method


  • 简而言之。不,可以做到。我建议你们阅读SCJP书的第2章。它对封装和继承有一个非常棒的解释。项目结构中的所有内容都是可见的和显示的,如果有相应的访问修饰符,就可以访问。问问自己,我们为什么要限制访问?那么我们为什么要在这种特殊情况下允许访问呢?。。。似乎可以通过修改设计来避免这样做。