1.Java允许我们直接使用一个类的子类的类体创建一个子类对象
2.有时候创建子类对象时,除了使用父类的构造方法外还有类体,这个类体被认为是一个子类去掉类声明后的类体,称作匿名类。
3.匿名类是一个子类,它一定会继承某个类。匿名类没有类名,它们不能被引用,不能有匿名类声明对象,只能在创建时用New语句和父类的构造方法创建一个对象。
4.匿名类一定是内部类,匿名类一定可以访问外嵌类的成员变量和方法。
如果A是一个类,那么用A类的一个子类(匿名类)创建的对象如下
new A(){
匿名类的类体//是继承或重写的方法,去掉了类声明后的类体
}
例如下列代码
abstract class Speak {//抽象类
public abstract void Say();//抽象方法
}
class Student {
void f(Speak sp) {
sp.Say();
}
}
public class Example6_2 {
public static void main(String args[]) {
Speak speak=new Speak() { //此处speak是上转型对象
public void Say() {
System.out.println("大家好");//重写类Speak的Say方法
}//匿名类
};
speak.Say();
Student st=new Student();
st.f(new Speak() {
public void Say() {
System.out.println("你们好!");
}
});
}
}
上例中的匿名类等价于
class subSpeak extends Speak{//要继承Speak类
public void Say() {
System.out.println("大家好");//重写类Speak的Say方法
}
}
subSpeak sub=new subSpeak();//sub就是Speak类的子类对象
当子类的类体比较简单时,可考虑用匿名类,此外匿名类一定是内部类,匿名类一定可以访问外嵌类的成员变量和方法。