Java匿名类,Java匿名内部类
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:
匿名类有两种实现方式:
下面通过代码来说明。
提示:匿名内部类实现一个接口的方式与实现一个类的方式相同,这里不再赘述。
匿名类有如下特点:
1)匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。
new <类或接口>() { // 类的主体 };这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。
匿名类有两种实现方式:
- 继承一个类,重写其方法。
- 实现一个接口(可以是多个),实现其方法。
下面通过代码来说明。
public class Out { void show() { System.out.println("调用 Out 类的 show() 方法"); } } public class TestAnonymousInterClass { // 在这个方法中构造一个匿名内部类 private void show() { Out anonyInter = new Out() { // 获取匿名内部类的实例 void show() { System.out.println("调用匿名类中的 show() 方法"); } }; anonyInter.show(); } public static void main(String[] args) { TestAnonymousInterClass test = new TestAnonymousInterClass(); test.show(); } }程序的输出结果如下:
调用匿名类中的 show() 方法从输出结果可以看出,匿名内部类有自己的实现。
提示:匿名内部类实现一个接口的方式与实现一个类的方式相同,这里不再赘述。
匿名类有如下特点:
1)匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。
public static void main(String[] args) { int a = 10; final int b = 10; Out anonyInter = new Out() { void show() { // System.out.println("调用了匿名类的 show() 方法"+a); // 编译出错 System.out.println("调用了匿名类的 show() 方法"+b); // 编译通过 } }; anonyInter.show(); }
2)匿名类中允许使用非静态代码块进行成员初始化操作。从 Java 8 开始添加了 Effectively final 功能,在 Java 8 及以后的版本中代码第 6 行不会出现编译错误,详情可点击《Java8新特性之Effectively final》进行学习。
Out anonyInter = new Out() { int i; { // 非静态代码块 i = 10; //成员初始化 } public void show() { System.out.println("调用了匿名类的 show() 方法"+i); } };3)匿名类的非静态代码块会在父类的构造方法之后被执行。
所有教程
- 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
- 大数据
- 云计算