文档详情

继承、接口和泛型.ppt

发布:2017-06-15约2.86万字共242页下载文档
文本预览下载声明
5.16 匿名类 匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象。假设Hello是父类,那么下列代码就是用Hello的一个子类(匿名类)创建对象: new Hello() { 匿名类的类体 } 5.16 匿名类 因此,匿名类可以继承类的方法,也可以重写类的方法。我们使用匿名类时,必然是在某个类中直接用匿名类创建对象,因此匿名类一定是内部类,匿名类可以访问外嵌类中的成员变量和方法,匿名类不可以声明static成员变量和static方法。 5.16 匿名类 尽管匿名类创建的对象没有经过类声明的步骤,但匿名类对象的引用必须传递给一个匹配的参数,匿名类的主要用途就是向方法的参数传值。 5.16 匿名类 假设f(B x)是一个方法 void f(B x) { x调用B类中的方法 } 其中的参数是B类对象,那么我们在调用方法f()时可以向f()的参数x传递一个匿名对象: 5.16 匿名类 f(new B() { 匿名类的类体 继承B类的方法或重写B类的方法 } ); 如果匿名类继承了类的方法,x就调用继承的方法;如果匿名类重写了父类的方法,x就调用重写的方法。 abstract class Student{ abstract void speak(); } class Teacher{ void look(Student stu){ stu.speak(); //执行匿名类体中重写的speak()方法 } } 例5-16:匿名类的用法。 public class Example5_16{ public static void main(String args[]){ Teacher zhang=new Teacher(); zhang.look(new Student(){ //匿名类的类体,即Student的子类的类体 void speak(){ System.out.println(这是匿名类中的方法); } } //匿名类类体结束 ); } } 例5-16:匿名类的用法。 5.16 匿名类 2、与接口有关的匿名类 假设Computable是一个接口,那么Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,即匿名类。下列代码就是用实现了Computable接口的类(匿名类)创建对象: new Computable(){ 实现接口的匿名类的类体 } 5.16 匿名类 如果某个方法的参数是接口类型,那么我们可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要实现接口中的全部方法。 假设f(Computable x)是一个方法,Computable是一个接口: void f(Computable x){ x调用匿名类实现的接口方法(接口回调) } 5.16 匿名类 其中的参数是接口,那么我们在调用方法f()时,可以向f()的参数x传递一个匿名对象: f(new Computable(){ 实现接口的方法 } ); x就可以调用匿名类实现的接口方法。 interface Show{ public void show(); } class A{ void f(Show s){ s.show(); //s调用匿名类体中实现的接口方法(接口回调) } } 例5-17:与接口有关的匿名类的用法。 public class Example5_17{ public static void main(String args[]){ A a=new A(); a.f(new Show(){ public void show(){ System.out.println(这是实现了
显示全部
相似文档