当前位置: 首页 > news >正文

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();
 }
}

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1426389如需转载请自行联系原作者

woshixuye111

相关文章:

  • 移动端点击作弊与激活作弊的现象与预警
  • IT人员的职业生涯规划
  • 电话号码校验
  • /var/spool/postfix/maildrop 下有大量文件
  • kubernetes test-infra
  • 关于Mysql查看某个ip连接数及删除掉这个ip连接的方法(也可以进行mysql锁表解锁)...
  • Impala数据处理(加载和存储)
  • iOS滤镜实现之LOMO(美图秀秀经典LOMO)
  • Storm概念学习系列之storm简介
  • em和px比较
  • CISCO 3750 不能修改接口mtu?
  • some code of c
  • __stdcall、__cdcel和__fastcall
  • 温故知新之javascript面向对象
  • Validation Application Block动手实验室
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • export和import的用法总结
  • Git学习与使用心得(1)—— 初始化
  • js继承的实现方法
  • Object.assign方法不能实现深复制
  • Spring-boot 启动时碰到的错误
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • XForms - 更强大的Form
  • 第十八天-企业应用架构模式-基本模式
  • 构建二叉树进行数值数组的去重及优化
  • 基于组件的设计工作流与界面抽象
  • 简析gRPC client 连接管理
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 实战|智能家居行业移动应用性能分析
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 说说我为什么看好Spring Cloud Alibaba
  • 通过调用文摘列表API获取文摘
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # Apache SeaTunnel 究竟是什么?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十八)三元表达式和列表解析
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)jQuery 基础
  • (转)母版页和相对路径
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 托管代码与非托管代码
  • .Net中wcf服务生成及调用
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • [20171101]rman to destination.txt
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计