内部 classes 继承和访问封闭 class methods/fields

Inner classes inheritance and access to enclosing class methods/fields

这是我发现的关于内部 类

的两个陈述

Java文档:

As with instance methods and variables, an inner class is associated with an instance of its enclosing class and has direct access to that object's methods and fields. Also, because an inner class is associated with an instance, it cannot define any static members itself.

我在另一个网站上发现了这个:

A nested class, for the most part, is just that—a class declared in the definition of an enclosing class. It does not inherit anything from the enclosing class, and an instance of the nested class cannot be assigned to a variable reference to the enclosing class.

加粗的线条不是自相矛盾吗? 怎么能不继承周围对象的字段和方法,同时又可以访问它的字段和方法呢?

不,他们不冲突。看下面的例子:

public class A {

     public void foo() {
         //some code
     }

     public class B {

         public void bar() {
              foo();
         }
     }
}

在这个例子中,内部类 B 可以访问 A 的方法(或者它的任何字段,实际上),但绝不会发生继承。

例如,对 B 的以下更改将导致编译错误:

 public class B {

     public void bar() {
          super.foo();
     }
 }

因为B没有继承自A。它可以访问它的实例成员,但它扩展(继承)它。

请不要将术语 nested classinner class 视为相反或类似的东西.事实上,nested class 简单地描述了在另一个 class:

中声明的各种 classes
  1. 声明为静态的嵌套 classes 简称为 static 嵌套 classes.
  2. 非静态嵌套classes被称为inner classes。它们分为三种类型(有关详细信息,请参阅 JLS §8.1.3):

    1. 非静态成员class。
    2. 本地人class.
    3. 匿名 class.

您引用的第一段解释了内部 class 可以访问(阅读:访问,而不是继承)封闭 实例 的方法和字段。注意,它是关于一个实例,而不是 class.

第二段试图解释其中的 class 和嵌套的 class 之间没有任何关系,除了它们的位置。