java内部类的匿名内部类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内部类的匿名内部类相关的知识,希望对你有一定的参考价值。

参考技术A

顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。
当程序中使用匿名内部类时,在定义匿名内部类的地方往往直接创建该类的一个对象。匿名内部类的声明格式如下:
new ParentName()
...// 内部类的定义

匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:
·只用到类的一个实例 。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、静态方法。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
A、继承式的匿名内部类
public class Car
public void drive()
System.out.println(Driving a car!);

public static void main(String[] args)
Car car = new Car()
public void drive()
System.out.println(Driving another car!);

;
car.drive();


结果输出了:Driving another car! Car引用变量不是引用Car对象,而是Car匿名子类的对象。
B、接口式的匿名内部类。
interface Vehicle
public void drive();

class Test
public static void main(String[] args)
Vehicle v = new Vehicle()
public void drive()
System.out.println(Driving a car!);

;
v.drive();


上面的代码很怪,好像是在实例化一个接口。事实并非如此,接口式的匿名内部类是实现了一个接口的匿名类。而且只能实现一个接口。
C、参数式的匿名内部类。
class Bar
void doStuff(Foo f)
f.foo();


interface Foo
void foo();

class Test
static void go()
Bar b = new Bar();
b.doStuff(new Foo()
public void foo()
System.out.println(foofy);

);

以上是关于java内部类的匿名内部类的主要内容,如果未能解决你的问题,请参考以下文章

java的内部类与匿名内部类

内部类和匿名内部类的用法

java内部类与匿名内部类作用分别是啥?

java匿名内部类

java匿名内部类

Java匿名内部类的学习