成员内部类

外部类名.内部类名 变量名 = new 外部类名().new 内部类();

public class Demo03 {
    public static void main(String[] args) {
        Outer.Inner in = new Outer().new Inner();
        in.func();
    }
}

class Outer{
    int num1 = 10;
    class Inner{
        int num2;
        public void func(){
            System.out.println("我是内部类的方法");
        }
    }
}

匿名内部类

public class Demo03 {
    public static void main(String[] args) {
        /**
         * 匿名内部类[接口]
         */
        Inter it = new Inter(){
            @Override
            public void func() {
                System.out.println("我是接口的匿名内部类");
            }
        };
        it.func();
        /**
         * 匿名内部类[抽象类]
         */
        AbsClass absClass = new AbsClass() {
            @Override
            void func() {
                System.out.println("我是抽象类的匿名内部类");
            }
        };
        absClass.func();
        /**
         * 方法参数是接口类型
         */
        m1(new Inter(){
            @Override
            public void func() {
                System.out.println("我是接口的匿名内部类");
            }
        });
        m2(new AbsClass() {
            @Override
            void func() {
                System.out.println("我是抽象类的匿名内部类");
            }
        });
    }
    public static void m1(Inter iter){
        iter.func();
    }
    public static void m2(AbsClass absClass){
        absClass.func();
    }
}

interface Inter{
    void func();
}

abstract class AbsClass{
    abstract void func();
}