java - 为啥在java中没有继承的情况下可以在同一个包中访问protected? [复制]

Posted

技术标签:

【中文标题】java - 为啥在java中没有继承的情况下可以在同一个包中访问protected? [复制]【英文标题】: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,那将是非常糟糕的。 【参考方案1】:

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

protected 可以从

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

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

【讨论】:

谢谢所以在Java中,如果我们有数据包,我们不能让子类访问空间字段并阻止同一数据包中的其他类访问它

以上是关于java - 为啥在java中没有继承的情况下可以在同一个包中访问protected? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

css 中宽高为啥没有继承?

Java中,通过实现Runnable接口来创建进程时,没有继承Thread类,为啥却可以创建Thread类对象

为啥我可以在没有请求的情况下注入请求范围的 bean?

为啥我的Androidstudio创建project没有xml和.java文件,而且好多红点?

为啥不能在 Java 中扩展注解?

在java中Exception是Throwable的子类,为啥Exception的范围比Throwable要小