Java内部类笔记
发布人:shili8
发布时间:2025-01-02 02:25
阅读次数:0
**Java 内部类笔记**
内部类是一种特殊的类,它定义在另一个类的内部。内部类可以访问外部类的成员变量和方法,且不需要实例化外部类就能使用。
### 一、内部类的定义内部类有两种形式:非静态内部类和静态内部类。
####1. 非静态内部类非静态内部类是最常见的一种内部类,它与外部类在同一个作用域内。非静态内部类可以访问外部类的成员变量和方法,且不需要实例化外部类就能使用。
javapublic class OuterClass { private int outerVar =10; public void outerMethod() { System.out.println("Outer method"); } public static class InnerClass { public void innerMethod() { // 可以访问outerVar和outerMethod System.out.println(outerVar); outerMethod(); } } }
####2. 静态内部类静态内部类是定义在外部类的静态成员变量中的内部类。静态内部类不能访问外部类的非静态成员变量和方法,且需要实例化外部类才能使用。
javapublic class OuterClass { public static int outerVar =10; public static void outerMethod() { System.out.println("Outer method"); } public static class InnerClass { public void innerMethod() { // 可以访问outerVar和outerMethod System.out.println(outerVar); outerMethod(); } } }
### 二、内部类的特点####1. 内部类可以访问外部类的成员变量和方法内部类可以直接使用外部类的成员变量和方法,且不需要实例化外部类。
javapublic class OuterClass { private int outerVar =10; public void outerMethod() { System.out.println("Outer method"); } public static class InnerClass { public void innerMethod() { // 可以访问outerVar和outerMethod System.out.println(outerVar); outerMethod(); } } }
####2. 内部类可以定义自己的成员变量和方法内部类也可以定义自己的成员变量和方法,与外部类无关。
javapublic class OuterClass { public static class InnerClass { private int innerVar =20; public void innerMethod() { System.out.println(innerVar); } } }
####3. 内部类可以继承外部类内部类也可以继承外部类,使用extends关键字。
javapublic class OuterClass { public static class InnerClass extends OuterClass { private int innerVar =20; public void innerMethod() { System.out.println(innerVar); } } }
### 三、内部类的应用####1. 匿名内部类匿名内部类是最常见的一种内部类,它不需要定义一个具体的类名。
javapublic class OuterClass { public void outerMethod() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Runnable"); } }; runnable.run(); } }
####2. Lambda 表达式Lambda 表达式是 Java8 中引入的一种匿名内部类,它可以简化代码。
javapublic class OuterClass { public void outerMethod() { Runnable runnable = () -> System.out.println("Runnable"); runnable.run(); } }
####3. 内部类作为回调函数内部类也可以作为回调函数使用,传递给外部类的方法。
javapublic class OuterClass { public void outerMethod(Runnable runnable) { runnable.run(); } public static class InnerClass implements Runnable { @Override public void run() { System.out.println("Runnable"); } } }
### 四、内部类的注意事项####1. 内部类不能定义静态成员变量和方法内部类不能定义静态成员变量和方法,否则会导致编译错误。
javapublic class OuterClass { public static class InnerClass { // 编译错误:static member variable and method cannot be defined in inner class private static int innerVar =20; } }
####2. 内部类不能继承外部类的静态成员变量和方法内部类不能继承外部类的静态成员变量和方法,否则会导致编译错误。
javapublic class OuterClass { public static int outerVar =10; public static class InnerClass extends OuterClass { // 编译错误:static member variable and method cannot be inherited by inner class private int innerVar =20; } }
### 五、内部类的总结内部类是一种特殊的类,它定义在另一个类的内部。内部类可以访问外部类的成员变量和方法,且不需要实例化外部类就能使用。内部类有两种形式:非静态内部类和静态内部类。内部类也可以作为回调函数使用,传递给外部类的方法。内部类不能定义静态成员变量和方法,也不能继承外部类的静态成员变量和方法。
### 六、内部类的参考资料* 《Java语言规范》(JLS)
* 《Java编程思想》(Thinking in Java)
* 《Java内存模型》(Java Memory Model)
### 七、内部类的实例代码
javapublic class OuterClass { private int outerVar =10; public void outerMethod() { System.out.println("Outer method"); } public static class InnerClass { public void innerMethod() { // 可以访问outerVar和outerMethod System.out.println(outerVar); outerMethod(); } } } public class OuterClass2 { public static int outerVar =10; public static void outerMethod() { System.out.println("Outer method"); } public static class InnerClass { public void innerMethod() { // 可以访问outerVar和outerMethod System.out.println(outerVar); outerMethod(); } } } public class OuterClass3 { public static class InnerClass implements Runnable { @Override public void run() { System.out.println("Runnable"); } } public void outerMethod(Runnable runnable) { runnable.run(); } }
### 八、内部类的常见问题####1. 内部类可以访问外部类的成员变量和方法吗?
是的,内部类可以直接使用外部类的成员变量和方法。
####2. 内部类可以定义自己的成员变量和方法吗?
是的,内部类也可以定义自己的成员变量和方法,与外部类无关。
####3. 内部类可以继承外部类吗?
是的,内部类也可以继承外部类,使用extends关键字。
####4. 内部类可以作为回调函数使用吗?
是的,内部类也可以作为回调函数使用,传递给外部类的方法。
####5. 内部类不能定义静态成员变量和方法吗?
是的,内部类不能定义静态成员变量和方法,否则会导致编译错误。
####6. 内部类不能继承外部类的静态成员变量和方法吗?
是的,内部类不能继承外部类的静态成员变量和方法,否则会导致编译错误。