- //匿名对象要实例化的接口
- interface Head
- {
- void think();
- }
- //匿名对象要实例化的类
- class Person
- {
- private String name;
- private int age;
- Person(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- public String toString()
- {
- return name+"("+age+")";
- }
- public void show()
- {
- System.out.println(toString());
- }
-
- /*private class Person_head implements head
- {
- void think()
- {
- System.out.println("Person thinking...");
- }
- }*/
- public void function()
- {
- //此处为匿名内部类,他结合了创建类和创建对象于一体
- //既创建了一个新的Education的子类,又new了一个这个子类的对象,而且这个对象是匿名的
- new Head()
- {
- public void think()
- {
- System.out.println(Person.this.toString()+" thinking...");
- }
- }.think();
- //此处为正常的内部类使用方法,就是被注释掉的代码部分
- //所以匿名内部类代码简洁很多,用起来很方便
- //Person_head ph = new Person_head();
- //ph.think();
- //注:匿名内部类的使用前提:必须是继承一个类或者实现接口,
- // 因为创建的部分要由父类或者接口的名字来完成
- // 匿名内部类要实现的方法最好不要超过3个,不然会很麻烦
- }
- }
- class AnonymousDemo
- {
- public static void main(String args[])
- {
- AnonymousClassMethod_1();
- AnonymousClassMethod_2();
- }
- //这应该是匿名对象的最初定义,即对象没有一个“名字”
- public static void AnonymousClassMethod_1()
- {
- //此处是正常创建对象的方法,对象有一个对应的引用p,所以可以多次调用p
- Person p = new Person("Sunny",2);
- p.show();
- p.show();
- //此处是匿名对象,新建的对象没有与其对应的引用来接受他,所以只能调用一次
- new Person("Sunny",2).show();
- //注:一般对象的方法只调用一次时,可以使用匿名对象,也可将匿名对象作为参数传递给函数
- }
- public static void AnonymousClassMethod_2()
- {
- //用一个Person类的匿名对象调用function
- //此处使用了匿名内部类,详见Person类中的function实现方法
- new Person("Sunny",2).function();
- }
- }
复制代码 |