Java中的匿名内部类-阿里云开发者社区

开发者社区> 科技探索者> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8251 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10030 0
匿名内部类方式构建对象导致序列化失败
###问题描述: 以下代码为问题代码: ``` public class ItemDO implements Serializable { private static final long serialVersionUID=-463144769925355007L; ... private Map langAndTitleMap; ...
1748 0
Java内部类
基本概念 内部类:是指把一个类的声明放到另一个类的声明中,甚至是放到一个方法内部,这样的类称为 内部类。 内部类分为 命名内部类和匿名内部类: 命名内部类:就像平时声明一个类一样,有个名字。
637 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
11860 0
5489
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载