博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的匿名内部类
阅读量:6507 次
发布时间:2019-06-24

本文共 1929 字,大约阅读时间需要 6 分钟。

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

一、不使用匿名内部类

①继承
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
你可能感兴趣的文章
在相同的主机上创建一个duplicate数据库
查看>>
Date15
查看>>
从Date类型转为中文字符串
查看>>
基于multisim的fm调制解调_苹果开始自研蜂窝网调制解调器 最快2024年能用上?
查看>>
mupdf不支持x64_Window权限维持(七):安全支持提供者
查看>>
labview如何弹出提示窗口_LabVIEW开发者必读的问答汇总,搞定疑难杂症全靠它了!...
查看>>
hikariconfig mysql_HikariConfig配置解析
查看>>
mysql批量数据多次查询数据库_mysql数据库批量操作
查看>>
jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法
查看>>
JDBC_MySQL_jdbc连接mysql_MySQL
查看>>
mysql cte的好处_Mysql 8 重要新特性 - CTE 通用表表达式
查看>>
zcu106 固化_xilinx zcu106 vcu demo
查看>>
java ftpclient 代码_java后台代码ftpclient下载文件
查看>>
java数据库生成model_继承BaseModelGenerator 生成Model时添加数据库表字段 生成代码示例...
查看>>
matlab建立桌面图标,在ubuntu16.04上创建matlab的快捷方式(实现方法)
查看>>
smarty使用php代码,笑谈配置,使用Smarty技术_php
查看>>
oracle数据实际值限制,c# – Oracle数据库TNS密钥“数据源”的值长度超过了’128’的限制...
查看>>
silk v3 decoder php,解码转换QQ微信的SILK v3编码音频为MP3或其他格式
查看>>
linux不能访问80端口,lunux开放80端口(本地访问不了linux文件可能是这个原因)...
查看>>
android单位转换小程序,微信小程序中rpx与rem单位转换
查看>>