Java实例内部类
实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。示例代码如下:
上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。
1)在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。
2)在实例内部类中,可以访问外部类的所有成员。
提示:如果有多层嵌套,则内部类可以访问所有外部类的成员。
3)在外部类中不能直接访问内部类的成员,而必须通过内部类的实例去访问。如果类 A 包含内部类 B,类 B 中包含内部类 C,则在类 A 中不能直接访问类 C,而应该通过类 B 的实例去访问类 C。
4)外部类实例与内部类实例是一对多的关系,也就是说一个内部类实例只对应一个外部类实例,而一个外部类实例则可以对应多个内部类实例。
如果实例内部类 B 与外部类 A 包含有同名的成员 t,则在类 B 中 t 和 this.t 都表示 B 中的成员 t,而 A.this.t 表示 A 中的成员 t。
5)在实例内部类中不能定义 static 成员,除非同时使用 final 和 static 修饰。
- public class Outer {
- class Inner {
- // 实例内部类
- }
- }
1)在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。
- public class Outer {
- class Inner1 {
- }
- Inner1 i = new Inner1(); // 不需要创建外部类实例
- public void method1() {
- Inner1 i = new Inner1(); // 不需要创建外部类实例
- }
- public static void method2() {
- Inner1 i = new Outer().new inner1(); // 需要创建外部类实例
- }
- class Inner2 {
- Inner1 i = new Inner1(); // 不需要创建外部类实例
- }
- }
- class OtherClass {
- Outer.Inner i = new Outer().new Inner(); // 需要创建外部类实例
- }
- public class Outer {
- public int a = 100;
- static int b = 100;
- final int c = 100;
- private int d = 100;
- public String method1() {
- return "实例方法1";
- }
- public static String method2() {
- return "静态方法2";
- }
- class Inner {
- int a2 = a + 1; // 访问public的a
- int b2 = b + 1; // 访问static的b
- int c2 = c + 1; // 访问final的c
- int d2 = d + 1; // 访问private的d
- String str1 = method1(); // 访问实例方法method1
- String str2 = method2(); // 访问静态方法method2
- }
- public static void main(String[] args) {
- Inner i = new Outer().new Inner(); // 创建内部类实例
- System.out.println(i.a2); // 输出101
- System.out.println(i.b2); // 输出101
- System.out.println(i.c2); // 输出101
- System.out.println(i.d2); // 输出101
- System.out.println(i.str1); // 输出实例方法1
- System.out.println(i.str2); // 输出静态方法2
- }
- }
3)在外部类中不能直接访问内部类的成员,而必须通过内部类的实例去访问。如果类 A 包含内部类 B,类 B 中包含内部类 C,则在类 A 中不能直接访问类 C,而应该通过类 B 的实例去访问类 C。
4)外部类实例与内部类实例是一对多的关系,也就是说一个内部类实例只对应一个外部类实例,而一个外部类实例则可以对应多个内部类实例。
如果实例内部类 B 与外部类 A 包含有同名的成员 t,则在类 B 中 t 和 this.t 都表示 B 中的成员 t,而 A.this.t 表示 A 中的成员 t。
- public class Outer {
- int a = 10;
- class Inner {
- int a = 20;
- int b1 = a;
- int b2 = this.a;
- int b3 = Outer.this.a;
- }
- public static void main(String[] args) {
- Inner i = new Outer().new Inner();
- System.out.println(i.b1); // 输出20
- System.out.println(i.b2); // 输出20
- System.out.println(i.b3); // 输出10
- }
- }
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算