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

开发者社区> it徐胖子> 正文

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

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

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9867 0
夯实Java基础系列18:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.comww.how2playlife.com 内部类初探 什么是内部类?   内部类是指在一个外部类的内部再定义一个类。
3532 0
Java内部类
基本概念 内部类:是指把一个类的声明放到另一个类的声明中,甚至是放到一个方法内部,这样的类称为 内部类。 内部类分为 命名内部类和匿名内部类: 命名内部类:就像平时声明一个类一样,有个名字。
638 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13595 0
java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类——Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部类   正文 可以将一个类的定义放在另一个类的定义内部,这就是内部类。
2246 0
Java中的匿名内部类
通常通过继承某个类或实现某个接口的方式来编写代码,但是有时候某一些代码只使用一次,就没有必要写专门写一个子类或实现类了,可以采用匿名内部类的写法。最常用的场景是线程方面的应用。一、不使用匿名内部类 ①继承 abstract class Player {public abstract void play(); } public class FootBallPlayer extend
695 0
+关注
it徐胖子
IT徐胖子
733
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载