【问题标题】:Why protected can be access in same Package without inheritance in java? [duplicate]java - 为什么在java中没有继承的情况下可以在同一个包中访问protected? [复制]
【发布时间】:2012-10-29 20:43:34
【问题描述】:
  Modifier        Class     Package   Subclass  World
  public          Y         Y         Y         Y
  protected       Y         Y         Y         N
  no modifier     Y         Y         N         N
  private         Y         N         N         N


  public class a {
  protected int x;
  }

  public class b {
        b() {
              a A=new a();
              A.x=9;//why we can access this field ?
        }
  }

请帮助我了解Java中protected的具体工作

【问题讨论】:

  • 请帮我了解一下Java中protected的具体工作
  • 因为 Java 编程语言就是这样设计的。
  • James Gosling 尚未加入 SO。等他注册。那么只有你会得到确切的原因。
  • 考虑一下:如果它没有那样工作,你将如何在同一个包中创建一组紧密耦合的类,同时将它们的一些内部导出到外部子类?为此,您需要更多修饰符,从而使语言变得不必要地复杂。
  • @aioobe 对我来说,主要的一点是“公共”和“受保护”都表示公共 API——API 的某些部分旨在通过扩展库的类来使用。这样看来,如果你不能将某些东西导出到你的包“朋友”而不成为公共 API,那将是非常糟糕的。

标签: java protected


【解决方案1】:

为什么?因为这就是 Java 编程语言的设计方式。没有更多的了。

protected 可以从

访问
  • 类本身,
  • 同一个包中的类(不管它们是否是子类),
  • 子类(不管它们是否在同一个包中)。

这与 C++ 不同,但 Java 不是 C++,因此不一定以相同的方式工作。

【讨论】:

  • 谢谢
    所以在Java中,如果我们有数据包,我们不能让子类访问空间字段并阻止同一数据包中的其他类访问它
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2012-12-10
  • 2010-10-28
  • 1970-01-01
  • 2015-11-23
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多