Java的嵌套类与内部类
三月 21, 2023
2017
在 Java 中,根据类的定义位置和特性,可以将类分为四种类型:顶层类、嵌套类、内部类和静态嵌套类。
其中嵌套类和内部类也是非常常见,但是在方法或者变量的使用时会让人糊涂。下面详细看看他们的使用。
嵌套类(Nested Class)
首先,嵌套类(Nested Class)包含静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class,又称为内部类Inner Class)。
静态嵌套类(Static Nested Class)
静态嵌套类使用 static 修饰符定义,它可以独立存在,而不依赖于外部类的实例。静态嵌套类不能访问外部类的非静态成员,但可以访问外部类的静态成员。创建静态嵌套类的实例不需要外部类的实例。
1 | public class OuterClass { |
非静态嵌套类(Non-static Nested Class)又称内部类(Inner Class)
内部类是非静态的嵌套类,它与外部类有一个紧密的关联,并且可以访问外部类的所有成员(包括私有成员)。内部类的实例总是与外部类的实例相关联。
1 | public class OuterClass { |
成员内部类和局部内部类
成员内部类: 定义在外部类的成员位置。
局部内部类: 定义在外部类的局部位置,也就是外部类中的方法内部。
嵌套类与外部类的数据访问
外部类访问嵌套类
- 嵌套类是Static的
因为Static的是类属性,无需创建实例,所以可以直接通过类名访问。1
2
3// 若是在OuterClass中,可去掉OuterClassName
OuterClassName.NestedClassName.methodName()
OuterClassName.NestedClassName.variable // 变量的访问 - 嵌套类不是是Static的
此时类是实例属性,需要创建实例。1
2
3
4OuterClass outerObj = new OuterClass();
OuterClass.InnerClass innerObj = outerObj.new InnerClass();
outerObj.methodName()
outerObj.variable // 变量的访问
嵌套类访问外部类
- 静态嵌套类
静态嵌套类可以访问外部类的静态成员,但不能直接访问非静态成员。要访问非静态成员,需要通过外部类的实例。
1 | staticVariable // 外部的静态成员直接访问 |
- 非静态嵌套类(内部类)
内部类可以直接访问外部类的所有成员(包括静态和非静态成员),不需要外部类的实例。
- 本文作者:Menglei Xie
- 本文链接:http://blog.xml.kim/2023/03/21/Java%E7%9A%84%E5%B5%8C%E5%A5%97%E7%B1%BB%E4%B8%8E%E5%86%85%E9%83%A8%E7%B1%BB/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
查看评论