java学习笔记day06---匿名内部类

1.匿名内部类:其实就是内部类的简化形式,它所体现的就是一个类或者接口的子类对象。
前提:
     内部类必须继承或实现外部类或接口。

格式:
    new 父类&接口(){};
    其实就是一个子类对象,用{};结束

 匿名内部类在程序中的体现形式有三种:
 1.父类为普通的类

class Inter{

}

class OuterTest{

    public static void function(){

        new Inter(){

            private int num = 9;
            void show(){
                System.out.println("这是Inter子类的成员变量num="+num);
            }
        }.show();
        /*
        若改以上代码为:编译时就会报错了,因为编译时检查左边类型Inter类中并没有show()方法
        Inter in = new Inter(){};
        in.show();
        */
    }
}

class  MyOuterDemo
{
    public static void main(String[] args) 
    {
        OuterTest.function();
    }
}

2.父类为抽象类(子类中一定要覆盖抽象方法)

 2.父类为抽象类(子类中一定要覆盖抽象方法)
abstract class Test{

    abstract void show();
}

class Outer{
    int x = 8;

    /* 这是匿名内部类的完整形式
    class Inter extends Test{

        void show(){
            System.out.println(x);
        }
    }
    */

    public void method(){

        //new Inter().show();

        Test t = new Test(){

            void show(){
                System.out.println("x="+x);
                System.out.println("这是覆盖Test抽象类中的方法,因为子类继承它就必须覆盖");
            }

            void show1(){
                System.out.println("这是Test子类自己的方法");
            }

        };
        t.show();
        //t.show1();运行这个里会报错,因为Test抽象类中并没有show1()方法
        
    }
}

class OuterInterDemo 
{
    public static void main(String[] args) 
    {
        new Outer().method();

    }
}

 3.父类为接口interface

interface Inter{
    void show();
}

class Outer{

    static Inter method(){

        return new Inter(){

            public void show(){
                System.out.println("show run");
            }
        };

    }
}


class OuterTest1 
{
    public static void main(String[] args) 
    {
        Outer.method().show();
        /*
        上面一句,相当于:
        Inter in = Outer。method();
        in.show();
        */
    }
}

什么时候使用匿名内部类?
   当函数的参数是一个接口类型时,该接口中的方法不超过3个的时候(因为方法过多时,产生匿名内部类的方法就变得太臃肿了),为了简化代码,将匿名内部类作为参数进行传递。

原文地址:https://www.cnblogs.com/luihengk/p/4052466.html