匿名内部类:没有名字的内部类。它是内部类的简化写法。
A:前提://内部类必须继承或实现一个外部类或者接口。
B:格式为:new 继承的父类或者接口名(){覆盖子类或者接口中的代码,(也可以自定义子类的内容。)}
C:简单理解:其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为///带内容的对象。
D: a,继承式的匿名内部类
b,接口式(也可以叫实现式的,名字无所谓)的匿名内部类
c,参数式的匿名内部类
interface Inter {
public abstract void show1();
public abstract void show2();
}
//有名字的内部类
class Outer {
public void method(){
class Inner implements Inter {
public void show1(){ //子类必须覆盖接口中的所有方法
System.out.println("show1");
}
public void show2(){
System.out.println("show1");
}
}
}
public void show() {
Inter in = new Inner(); //父类引用指向子类对象
in.show1();
in.show2();
}
}
//匿名内部类(重点,android里面用的多,awt的监听器用的多)
class Outer {
public void method() {
//匿名内部类对象调用方法 只能调用一次
new Inter() {
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show1();
new Inter() { //在此建立调用show2()
public void show1() {
System.out.println("show1");
}
public void show2(){
System.out.println("show2");
}
}.show2();
//匿名内部类对象的另一种调用方式,父类引用指向子类对象(多态)
Inter in = new Inter() {
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show1");
}
};
in.show1();
in.show2(); //如果父类Intet中没有show2()的方法,这里就编译失败,因为父类中没定义过,只能使用子类的方法
}
}
(5)什么时候使用匿名内部类呢?
通常在使用方法是接口类型参数,并该接口中的方法不超过三个时,可以将匿名内部类作为参数传递。
也就是说,//匿名内部类中定义的方法最好不要超过三个[/code] |