Java 中除了内部类,还有一种匿名内部类,匿名内部类就是指没有一个具体名称的类,且是在接口和抽象类的应用上发展起来的。
interface A{//定义接口A
    public void printInfo();//定义抽象方法
}
class B implements A{//定义接口实现类
    public void printInfo(){//覆写抽象方法
        System.out.println("Hello World !!!");
    }
}
class X{//定义 X 类
    public void fun1(){//定义 fun1 方法
        this.fun2(new B());//传递子类实例
    }
    public void fun2(A a){//接收接口实例
        a.printInfo();//调用接口方法
    }
}
public class Test{
    public static void main(String[] args) {
        new X().fun1();//实例化X类并调用 fun1() 方法
    }
}
此时如果接口的实现类只使用一次,那么就没有必要单独定义一个子类 B,所以此时可以使用匿名内部类完成:
interface A{//定义接口A
    public void printInfo();//定义抽象方法
}
class X{//定义 X 类
    public void fun1(){//定义 fun1 方法
        this.fun2(new A(){//匿名内部类
            public void printInfo(){//实现接口中的抽象方法
                System.out.println("Hello World !!!");
            }
        });
    }
    public void fun2(A a){//接收接口实例
        a.printInfo();//调用接口方法
    }
}
public class Test{
    public static void main(String[] args) {
        new X().fun1();//实例化X类并调用 fun1() 方法
    }
}
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 
直接实例化接口对象:
new A() {}
- 1
 
此时是直接为接口实例化,但是接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。

                

















