Java--匿名类(学习笔记)


匿名类的特点:

(1) 匿名类是final类;
(3) 在匿名类中可以定义实例变量和若干个实例初始化代码块和新的实例方法。Java虚拟机首先调用父类的构造方法,然后按照实例变量的和实例初始化代码块定义的先后次序依次进行初始化。
(4) 匿名类除了可以继承类以外,还可以实现接口;
(5) 匿名类可以访问外部类的所有成员,如果匿名类位于一个方法中,还能访问所在方法的final类型的局部变量。

public class Outer {
        Outer(int v) {
            System.out.println("another constructor");
        }
        Outer() {
            System.out.println("default constructor");
        }
        void f() {
            System.out.println("from Outer");
        };
        public static void main(String args[]) {
            new Outer().f();      // 显示from Outer
            final int i = 1;
            Outer a = new Outer(i) {    // 匿名类
                {
                    System.out.println("initialize constructor");
                }
                void f() {
                    System.out.println("from anonymous" + "   " + i);
                }
            };
            a.f();         // 显示from anonymous
        }    
    }
/*
运行结果
default constructor
from Outer
another constructor
initialize constructor
from anonymous   1
*/
/*
说明:以上“new Outer(){…}”定义了一个继承类Outer的匿名类,大括号内是类Outer的类体,“new Outer(){…}”返回匿名类的一个实例的一个引用
*/