用匿名内部类就是为了简化开发:接口的实现,需要一个新类来实现接口,为了避免创建新的类,直接采用匿名内部类,简化开发
package innerClass01;
/**
 * @author QinYingjie
 * @version 1.0
 */
public class InnerClass02 {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.method();
    }
}
//匿名内部类的理解
//说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名
//使用匿名内部类就是为了简化开发:接口的实现,需要一个新类来实现接口,为了避免创建新的类,直接采用匿名内部类,简化开发
//1.匿名内部类的基本语法
//new 类/接口(参数列表){
// 类体
// }
//
//匿名内部类:1.本质是类,2.内部类,3.该类没有名字(其实是有名字,底层是系统分配)4.同时还是一个对象
class Outer02
{
    private int n1 = 10;
    public void method()
    {
        //基于接口的匿名内部类
        /**
         * 底层
         * class xxxx implements A
         * {
         * @override
         * public void cry()
         * {
         * System.out.println("老虎叫换...")
         * }
         *
         */
      A a  =new A()
        {
            @Override
            public void cry() {
                System.out.println("老虎哭泣...");
            }
        };
         a.cry();
        System.out.println("a的运行类型:"+a);
//        基于类的匿名内部类
//        1.不能添加访问修饰符,因为它的地位就是一个局部变量
//        2.作用域:仅仅在定义它的方法或代码块中
//        3.外部其他类不能访问匿名内部类,匿名内部类地位相当于一个局部变量
//        8.如果外部类和匿名内部类的成员重名时,匿名内部类访问的话,默认遵守就近原则
//        如果想访问匿名内部类的成员,可以使用(外部类名.this.匿名内部类的成员)
        Father father = new Father("jjj"){
            private int n1 = 200;
            public void test()
            {
                System.out.println("父亲类在测试");
            }
        };
        System.out.println("father运行类型是:"+father);
        System.out.println(n1);
    }
}
interface A{
    public void cry();
}
class Father{
    public Father(String name){
    }
    public void test()
    {
    }
}