匿名内部类

匿名内部类也就是没有名字的内部类

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

匿名内部类适合创建那种只需要一次使用的类,例如命令模式时所需要的Command对象。匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。

从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
 关于匿名内部类还有如下两条规则:
 1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类
 定义成抽象类。
 2)匿名内部类不等定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,
 通过实例初始化块来完成构造器需要完成的事情。

interface Product
{
	void test();
}
class A implements Product
{
	public void test()
	{
		System.out.println("kkk");
	}
}
public class Test
{
	public static void main(String args[])
	{
		Product p=new Product(){
			public void test()
			{
				System.out.println("这是什么玩意。");	
			}
		};
	}
}

public class Demo {
    public static void main(String[] args) {
        Thread t = new Thread() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        t.start();
    }
}

public class Demo {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
}

当用接口作为参数:
interface A{
    public void printInfo();
}
class X{
    public void fun1(){
        this.fun2(new A(){
            public void printInfo(){
                System.out.println("Hello World!!!");
            }//内部类
        });
    }
    public void fun2(A a){
        a.printInfo();
    }
}
public class Test{
    public static void main(String args[]){
        new X().fun1();
    }
}


原文地址:https://www.cnblogs.com/dengshiwei/p/4258554.html