一、基础概念  

  匿名内部类:简化书写的内部类。其实匿名内部类就是一个子类对象。

  前提:内部类需要继承或者实现外部的类或者接口。

  格式:new 父类或者接口(){定义子类的内容}

二、将内部类定义到局部的实例代码  

 /*
class Outer
{
int num = 2;
//内部类
class Inner
{
int num = 3;
void show()
{
int num = 4;
System.out.println("show ..."+num);
System.out.println("show ..."+Inner.this.num);
System.out.println("show ..."+Outer.this.num);
}
}
public void method1()
{
new Inner().show();
}
}
*/ //将上面代码的内部类定义到局部位置上。
class Outer
{
private int num = 2;
public void method1()
{
final int x=3; //内部类在局部时,只能被final修饰的局部常量,才可以被访问。
class Inner
{
void show()
{
int num = 4;
System.out.println("x="+x);
System.out.println("show ..."+num);
System.out.println("show ..."+Outer.this.num);
}
} //创建内部类对象
Inner in = new Inner();
in.show();
}
} class InnerClassDemo2
{
public static void main(String[] args)
{
new Outer().method1();
}
}

  Java面向对象之内部类(匿名内部类)-LMLPHP

三、匿名内部类实例代码(一)

 abstract class Demo
{
abstract void show1();
} class OuterDemo
{
int num = 4;
/*
class Inner extends Demo
{
//复写
public void show1()
{
System.out.println("show1 ..."+num);
}
}
Inner in = new Inner();
in.show();
*/ //将上面注释的代码用匿名内部类的方式显示 public void method2()
{
//匿名内部类
new Demo()
{
public void show1()
{
System.out.println("show1 ..."+num);
}
}.show1();
}
} class InnerClassDemo2
{
public static void main(String[] args)
{
new OuterDemo().method2();
}
}

  Java面向对象之内部类(匿名内部类)-LMLPHP

四、匿名内部类实例代码(二)

 abstract class Demo
{
abstract void show1();
abstract void show2();
} class OuterDemo
{
int num = 4;
/*
class Inner extends Demo
{
//复写
public void show1()
{
System.out.println("show1 ..."+num);
}
public void show2()
{
System.out.println("show2 ..."+num);
}
}
Inner in = new Inner();
in.show();
*/ //将上面注释的代码用匿名内部类的方式显示
public void method2()
{
//匿名内部类
Demo a = new Demo()
{
void show1()
{
System.out.println("show1 ..."+num);
}
void show2()
{
System.out.println("show2 ..."+num);
}
};
a.show1();
a.show2();
}
} class InnerClassDemo2
{
public static void main(String[] args)
{
new OuterDemo().method2();
}
}

  Java面向对象之内部类(匿名内部类)-LMLPHP

05-16 23:55