Java中的匿名内部类

简介:
通常通过继承某个类或实现某个接口的方式来编写代码,但是有时候某一些代码只使用一次,就没有必要写专门写一个子类或实现类了,可以采用匿名内部类的写法。最常用的场景是线程方面的应用。

一、不使用匿名内部类
①继承
abstract class Player
{
public abstract void play();
}

public class FootBallPlayer extends Player
{
public void play()
{
System.out.println("踢足球");
}
}

public class AnonymousInnerClassTest
{
public static void main(String[] args)
{
Player p1 = new FootBallPlayer();
p1.play();
}
}

②接口
interface IPlayer
{
public void play();
}

public class IPlayFootballImpl implements IPlayer
{
public void play()
{
System.out.println("踢足球");
}
}

public class AnonymousInnerClassTest
{
public static void main(String[] args)
{
IPlayer ip1 = new IPlayFootballImpl();
ip1.play();
}
}


二、使用匿名内部类
①继承
abstract class Player
{
public abstract void play();
}


public class AnonymousInnerClassTest
{
public static void main(String[] args)
{
Player p2 = new Player() {
public void play()
{
System.out.println("打篮球");
}
};
p2.play();
}
}

②接口
interface IPlayer
{
public void play();
}

public class AnonymousInnerClassTest
{
public static void main(String[] args)
{
IPlayer ip2 = new IPlayer() {
public void play()
{
System.out.println("打篮球");
}
};
}
}

三、线程中的应用
实现线程的方法有两种:①继承Thread类 ②实现Runnable接口。给出用匿名类实现的例子:

public class ThreadTest
{
public static void main(String[] args)
{
// 继承Thread类
Thread thread = new Thread() {
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
System.out.println(this.getName());
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
}
};
thread.start();

// 实现Runnable接口
Thread thread2 = new Thread(new Runnable() {
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
}
});
thread2.start();
}
}
目录
相关文章
|
9月前
|
人工智能 缓存 算法
《Java 优化秘籍:计算密集型 AI 任务加速指南》
在AI蓬勃发展的今天,计算密集型任务对Java代码优化提出了更高要求。本文探讨了针对此类任务的优化策略,涵盖内存管理、CPU性能挖掘、算法与数据结构选型、高效I/O处理及持续监测评估等方面,助力开发者提升程序性能,应对挑战,在AI浪潮中乘风破浪。
221 18
|
9月前
|
机器学习/深度学习 数据采集 人工智能
《人工智能如何加速药物研发进程:从新药发现到临床试验的突破》
在医药领域,药物研发复杂且成本高昂,新药推出面临诸多挑战。人工智能(AI)通过分析海量生物数据,加速靶点识别、药物分子设计及临床试验设计与数据分析,显著提升研发效率和质量。AI利用机器学习算法和大数据分析,优化试验方案,预测药物疗效与安全性,助力智能化药物研发平台的建设。尽管存在数据质量和隐私等挑战,AI仍为药物研发带来巨大潜力与创新机遇。
432 10
|
9月前
|
存储 缓存 Oracle
Java线程池,白话文vs八股文,原来是这么回事!
本文介绍了Java线程池的原理、实现方式及相关参数。首先,通过类比公司员工的方式解释了线程池的核心概念,如核心线程、最大线程数、任务队列和拒绝策略。接着,详细描述了线程池的任务处理流程,并提供了使用`ThreadPoolExecutor`和`Executors`创建线程池的代码示例,强调了`ThreadPoolExecutor`的灵活性和`Executors`的局限性。最后,总结了线程池的相关参数及不同类型的线程池实现,并附带常见面试题及其解答,帮助读者全面理解线程池的应用场景和优化方法。
124 4
|
Kubernetes API 调度
Kubernetes详解(十五)——Pod对象创建过程
Kubernetes详解(十五)——Pod对象创建过程
232 5
|
弹性计算 DataWorks 关系型数据库
ECS转发问题之两台ecs做转发如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
传感器 存储 IDE
ESP32
ESP32是一系列低成本、低功耗的SoC微控制器,集成了Wi-Fi和双模蓝牙功能。ESP32系列采用Tensilica Xtensa LX6微处理器,包括双核和单核版本,也有Xtensa LX7双核微处理器或单核RISC-V微处理器,内置天线开关、射频平衡器、功率放大器、低噪声接收放大器、滤波器和电源管理模块。ESP32由上海的Espressif Systems公司创建和开发,使用台积电的40纳米工艺制造。它是ESP8266微控制器的后继产品。
1142 3
|
Kubernetes 监控 Cloud Native
云快充云原生稳定性建设之路
“在阿里云的帮助下,云快充通过全面容器化与稳定性建设,极大地促进了业务的快速迭代。希望新能源行业的其他技术团队可以和我们一起共同探索云原生稳定性方面的技术路径。”
583 0
云快充云原生稳定性建设之路
|
存储 缓存 资源调度
flink面试问题总结(2)
flink面试问题总结(2)
flink面试问题总结(2)
|
机器学习/深度学习 算法 数据挖掘
预测分析的定义及作用 | 学习笔记
快速学习预测分析的定义及作用
645 0
预测分析的定义及作用 | 学习笔记
|
缓存 JSON IDE
Clang Module 内部实现原理及源码分析
钉钉工程开始支持Swift,在适配clang module的过程中,遇到了各种各样的编译问题,为了弄清楚这些编译失败的真正原因,以及clang module的最佳实践,决定通过深入阅读clang module的实现代码,来解开这些谜团。
1292 0
Clang Module 内部实现原理及源码分析