### Android学习之内部类 #### 一、内部类概述与分类 在Java编程语言中,一个重要的特性就是可以在一个类的内部定义另一个类,这样的类被称为内部类。根据定义方式和使用场景的不同,内部类主要可以分为四种类型:常规内部类、局部内部类、匿名内部类以及静态嵌套类。 #### 二、常规内部类 常规内部类是最常见的内部类形式之一。它是指在其他类内部定义的非静态类。以下是一个简单的常规内部类示例: ```java public class Outer { private int x = 1; public Outer() { System.out.println("Outer initial"); } public class Inner { public Inner() { System.out.println("Inner initial"); } private int x = 2; public void add() { int x = 3; System.out.println(x); System.out.println(this.x); System.out.println(Outer.this.x); } } public static void main(String[] args) { Inner inner = new Outer().new Inner(); inner.add(); } } ``` 编译后,可以看到有两个`.class`文件生成:`Outer.class`和`Outer$Inner.class`。后者是内部类编译后的文件,其中的`$`符号用于区分外部类和内部类。 **重要特点:** 1. **访问权限:**内部类可以直接访问外部类的所有成员,包括私有成员。 2. **实例化:**内部类对象依赖于外部类的实例,即内部类的每个实例都隐含地关联着外部类的一个实例。 3. **this关键字:**内部类中的`this`关键字指的是内部类本身的实例,若要引用外部类的实例,则需要使用`Outer.this`的形式。 4. **静态成员:**由于内部类对象是外部类实例的一部分,因此内部类不能拥有静态成员。 **创建方法:** - 在外部类内部直接创建:`Inner inner = new Inner();` - 在外部类外部创建:`Outer outer = new Outer(); Inner inner = outer.new Inner();` #### 三、局部内部类 局部内部类是在方法或构造函数内部定义的类。这类内部类只能在其所在的方法内部访问,并且不能使用非`final`的局部变量。 例如: ```java public class Outer { public void doSomething() { final int y = 2; class Inner { int x = 3; void print() { int x = 4; System.out.println(x); System.out.println(this.x); System.out.println(Outer.this.x); System.out.println(y); } } Inner inner = new Inner(); inner.print(); } public static void main(String[] args) { Outer outer = new Outer(); outer.doSomething(); } } ``` **特点:** 1. **访问控制:**局部内部类不能使用如`public`、`protected`、`private`等访问修饰符。 2. **生命周期:**局部内部类的生命周期与其所在的方法一致。 3. **变量访问:**局部内部类可以访问其所在方法的局部变量,但这些变量必须是`final`的。 #### 四、匿名内部类 当一个内部类仅被用来实现某个接口或继承某个类并且只使用一次时,可以使用匿名内部类。这种方式不需要定义类名,而是在创建对象的同时完成类的定义。 例如,假设有一个接口`Runnable`,我们可以这样创建一个匿名内部类来实现该接口: ```java public class Test { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { // 实现run方法 } }); thread.start(); } } ``` **总结:** 本文介绍了Java中内部类的概念及其四种类型:常规内部类、局部内部类、匿名内部类以及静态嵌套类。每种类型的内部类都有其独特的应用场景和特点。了解这些特性有助于开发者更灵活地进行Android应用程序的设计和开发。
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助