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

}

}

Java中的匿名内部类,布布扣,bubuko.com

时间: 2024-07-28 12:40:00

Java中的匿名内部类的相关文章

Java中的匿名内部类总结

匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法 abstract class Person { public abstract void eat(); } class Childextends Person { public void eat() { System.out.println("eat something"); } }

java中的匿名内部类总结(转)

java中的匿名内部类总结 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法 abstract class Person { public abstract void eat(); } class Child extends Person { public void eat() { System.out.println("eat someth

java-se-面试(3)-java中的匿名内部类总结

java中的匿名内部类总结 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法 abstract class Person { public abstract void eat(); } class Child extends Person { public void eat() { System.out.println("eat someth

JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?

本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量. 因此,内部类能够访问某局部变量,说明这个内部类不是在类中定义的内部类,而是在方法中定义的内部类,称之为:局部内部类. 局部变量的作用域:局部变量是在某个方法中定义,当该方法执行完成后,局部变量也就消失了.[局部变量分配在JVM的虚拟机栈中,这部分内存空间随着程序的执行自动回收],也即:局部变量的作用域是在 “方法的范围内”.

Java中的匿名内部类及内部类的二三事

匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用. 定义匿名类的格式如下: new 实现接口() |父类构造器(实参列表){ //匿名内部类的类体部分 } 从定义来看,匿名内部类必须继承一个父类,或者实现一个接口,但是最多只能继承一个父类或者实现一个接口. 关于匿名内部类,还有如下两条规则: 匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象.因此不允许将匿名内部类定义成抽象类. 匿

Java 中的匿名内部类

所谓的匿名内部类就是没有名字的内部类,通常此类型内部类只使用一次. 匿名内部类在创建时,必须作为 new 语句的一部分来声明,这就要采用另一种特殊形式的 new 语句. 语法 :  这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,同时还创建那个类的一个新实例,并把它作为语句的结果而返回. 例如,定义一个接口,如下所示: 定义接口的实现类: 测试程序如下: 运行结果为: 其中, Service 为一个接口,在方式二中,使用匿名内部类创建了 Servic

Java中,匿名内部类

匿名内部类 就是局部内部类的简化写法. 前提:存在一个类或者接口. 这里的类可以是具体类也可以是抽象类. 格式: new 类名或者接口名() { 重写方法; } 匿名内部类的本质是什么呢? 答:是一个继承了该类的子类或者实现了该接口的实现类(子类)的匿名对象. 简言之:匿名内部类是一个子类的匿名对象. 再简言之:匿名内部类是子类的对象. 小结:匿名内部类是一个结合体,是子类和对象的结合体. 示例代码如下所示: 原文地址:https://www.cnblogs.com/chenmingjun/p/

Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液.跳动),显然,此处不能单方面用属性或者方法表示一个心脏了,而需要一个类,但是这个类要依赖于人这个类存在(因为心脏不能脱离人体而存活,当然不考虑现今社会的发达科技,只从正常情况下来说),所心脏以需要写在人类的内部.内部类就相当于其中的某个器官之一. 首先看看什么是内部类:在类的内部定义另一个类.没错

java中的内部类和匿名内部类的使用

部分内容参考http://www.imooc.com/ 内部类: 什么是 Java 中的内部类 问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!! 答:内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内