内部类继承和访问封闭的类方法/字段

时间:2016-03-17 07:11:38

标签: java inheritance inner-classes

以下是我发现的关于内部类的两个陈述

的JavaDoc:

  

与实例方法和变量一样,内部类是关联的   使用其封闭类的实例并具有直接访问它   对象的方法和字段。另外,因为内部阶级是   与实例相关联,它无法定义任何静态成员   本身。

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

  

大多数情况下,嵌套类只是一个声明的类   封闭类的定义。 它不会继承任何东西   来自封闭类,并且嵌套类的实例不能   被赋予对封闭类的变量引用。

大胆的标记线是否矛盾? 你怎么能不继承周围的对象字段和方法,同时可以访问它的字段和方法?

2 个答案:

答案 0 :(得分:4)

不,他们没有冲突。请看以下示例:

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继承。它可以访问它的'实例成员,但它确实 扩展(继承)。

答案 1 :(得分:2)

请不要将术语嵌套类内部类视为相反或类似的东西。实际上,nested class只是描述了在另一个类中声明的各种类:

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

    1. 非静态成员类。
    2. 当地一班。
    3. 匿名课程。
  3. 您引用的第一段解释了内部类对封闭的实例的方法和字段具有访问权限(读取:访问,而不是继承)。注意,它是关于一个实例,而不是类。

    第二段试图解释一个类和它内部的嵌套类之间没有关系,除了它们的位置。