package cn.java.objectoriented;
/**
匿名内部类:内部类的简写格式。
前提:
内部必须继承或者实现一个外部类或者外部接口。
匿名内部类其实就是一个子类匿名对象。
场景之一:
当函数的参数是接口类型时,e而且该接口中的方法不超过3个时,
可以给这个函数传递一个匿名内部类。这样书写较为简单。
格式: new 父类名or接口名(){}
*/
abstract class AbsDemo
{
abstract void show();
}
//正常内部类
class OuterClass
{
int num = 6;
class Inner extends AbsDemo
{
void show()
{
System.out.println("正常内部类:num="+num);
}
}
public void method()
{
new Inner().show();
}
}
//匿名内部类方式
class OuterClass2
{
int num = 6;
public void method()
{
new AbsDemo()
{
void show()
{
System.out.println("匿名内部类:num+===="+num);
}
}.show();
}
}
//匿名内部类实现接口的形式,和调用多方法情况
interface Inter
{
void show1();
void show2();
}
class OuterClass3
{
int num=6;
/*
class Inner implements Inter
{
public void show1(){}
public void show2(){}
}
*/
public void function()
{
// Inner in = new Inner();
// in.show1();
// in.show2();
Inter in = new Inter()
{
public void show1(){
System.out.println("匿名内部类实现接口的形式show1: "+num);
}
public void show2(){
System.out.println("匿名内部类实现接口的形式show2: "+num);
}
};
in.show1();
in.show2();
}
}
public class InnerClassOfAnonymous {
static int num=88;
public static void main(String[] args) {
new OuterClass().method();
new OuterClass2().method();
new OuterClass3().function();
//实现接口的匿名内部类作为参数传递
method2(new Inter() {
public void show2() {
System.out.println("实现接口的匿名内部类作为参数传递"+num);
}
public void show1() {
System.out.println("实现接口的匿名内部类作为参数传递"+num);
}
});
}
public static void method2(Inter in)
{
in.show1();
in.show2();
}
}
上面类InnerClassOfAnonymous的main方法的执行结果为:
正常内部类:num=6
匿名内部类:num+====6
匿名内部类实现接口的形式show1: 6
匿名内部类实现接口的形式show2: 6
实现接口的匿名内部类作为参数传递88
实现接口的匿名内部类作为参数传递88