Java基础-内部类
发布人:shili8
发布时间:2025-02-04 02:27
阅读次数:0
**Java 基础 - 内部类**
内部类是一种特殊的类,它定义在另一个类的内部。内部类可以访问外部类的成员变量和方法,反之亦然。
### 一、内部类的分类内部类有两种类型:非静态内部类和静态内部类。
####1. 非静态内部类非静态内部类是定义在一个类的内部的普通类。它可以访问外部类的成员变量和方法,反之亦然。
javapublic class OuterClass { private int outerVar =10; public void outerMethod() { System.out.println("Outer method"); } public class InnerClass { public void innerMethod() { System.out.println(outerVar); outerMethod(); } } }
在上面的例子中,`InnerClass` 是 `OuterClass` 的非静态内部类。它可以访问 `outerVar` 和 `outerMethod()`。
####2. 静态内部类静态内部类是定义在一个类的内部的静态类。它不能访问外部类的成员变量和方法,反之亦然。
javapublic class OuterClass { public static class InnerStaticClass { public void innerMethod() { System.out.println("Inner static method"); } } }
在上面的例子中,`InnerStaticClass` 是 `OuterClass` 的静态内部类。它不能访问 `outerVar` 和 `outerMethod()`。
### 二、内部类的使用场景内部类有以下几个使用场景:
####1. 匿名内部类匿名内部类是没有名称的内部类。它通常用于实现接口或继承父类时,需要一个临时的内部类。
javapublic class OuterClass { public void outerMethod() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Runnable"); } }; runnable.run(); } }
在上面的例子中,`Runnable` 是一个接口,匿名内部类实现了这个接口。
####2. lambda 表达式lambda 表达式是 Java8 中引入的新特性。它可以用来简化匿名内部类的写法。
javapublic class OuterClass { public void outerMethod() { Runnable runnable = () -> System.out.println("Runnable"); runnable.run(); } }
在上面的例子中,lambda 表达式实现了 `Runnable` 接口。
####3. 内部类作为回调函数内部类可以作为回调函数使用。回调函数是指一个函数被另一个函数调用,并且这个函数可能会改变外部函数的状态。
javapublic class OuterClass { public void outerMethod() { InnerClass inner = new InnerClass(); inner.innerMethod(); } private class InnerClass { public void innerMethod() { System.out.println("Inner method"); } } }
在上面的例子中,`innerMethod()` 是一个回调函数,它被 `outerMethod()` 调用。
### 三、内部类的优点和缺点内部类有以下几个优点:
####1. 内部类可以访问外部类的成员变量和方法内部类可以直接访问外部类的成员变量和方法,这样可以减少代码的冗余性。
####2. 内部类可以作为回调函数使用内部类可以作为回调函数使用,这样可以实现更复杂的逻辑。
####3. 内部类可以简化代码内部类可以简化代码,使得代码更加易读和维护。
但是,内部类也有以下几个缺点:
####1. 内部类会增加代码的复杂性内部类会增加代码的复杂性,因为它需要额外的类定义和方法调用。
####2. 内部类可能导致命名冲突内部类可能导致命名冲突,因为它使用了相同的名称空间。
####3. 内部类可能导致性能问题内部类可能导致性能问题,因为它需要额外的内存分配和垃圾回收。
综上所述,内部类是一个非常有用的工具,它可以简化代码、实现复杂逻辑和作为回调函数使用。但是,它也有一些缺点,如增加代码的复杂性、导致命名冲突和性能问题。因此,需要谨慎地使用内部类,以避免这些问题。
### 四、总结本文介绍了Java基础中的内部类,包括非静态内部类和静态内部类的定义、分类、使用场景和优点和缺点。内部类是一个非常有用的工具,它可以简化代码、实现复杂逻辑和作为回调函数使用。但是,它也有一些缺点,如增加代码的复杂性、导致命名冲突和性能问题。因此,需要谨慎地使用内部类,以避免这些问题。
### 五、参考资料* 《Java语言规范第8 版》
* 《Java编程思想》第三版* 《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版