匿名类
2016-05-23 10:13
288 查看
匿名类(只有类体,没有类声明)分为两种,和类有关的匿名类和与接口有关的匿名类。
和类有关的匿名类:利用类名和类体创建一个匿名对象。此类体被认为是该类的一个子类去掉类声明后的类体,称为匿名类.
匿名类就是一个子类,不能用匿名类声明对象,但可以直接创建对象。
匿名类可以继承父类的方法也可以重写父类的方法。
使用匿名类时必然是在某个类中直接用匿名类创建对象,因此匿名类是一个内部类。可以访问外嵌类中的成员变量和方法,不可以声明static成员变量和方法。
匿名类的主要用途是向方法参数传值。
匿名类创建对象:
匿名类作为方法参数:
new A(){void getval(int n){print(n*n);}} (匿名类)等价于创建了一个A的子类,重写了f()方法,然后将该对象作为参数传递给对象a,使其转为上转型对象,这样可以调用匿名类重写的方法。
和接口有关的匿名类:
使用接口和类体创建一个匿名对象。此类体被认为是实现了接口的类去掉类声明的类体,称为匿名类。
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合的方式创建一个匿名对象,传递给方法的参数,类体必须要实现接口中的所有方法。
和类有关的匿名类:利用类名和类体创建一个匿名对象。此类体被认为是该类的一个子类去掉类声明后的类体,称为匿名类.
匿名类就是一个子类,不能用匿名类声明对象,但可以直接创建对象。
匿名类可以继承父类的方法也可以重写父类的方法。
使用匿名类时必然是在某个类中直接用匿名类创建对象,因此匿名类是一个内部类。可以访问外嵌类中的成员变量和方法,不可以声明static成员变量和方法。
匿名类的主要用途是向方法参数传值。
匿名类创建对象:
class A{ void f(){} } public class Examle{ public static void main(String arg[]){ A a=new A(){ void f(){print("C");} } a.f();//此时输出的结果是C。new A(){void f(){print("C");}就是匿名类,由类名和类体组成。类名和父类名相同,类体是对父类方法的重写。该匿名类相当于A的子类,省略了声明对象的功能。等价于声明一个继承了类A的子类B,然后用B创建的对象作为a的上转型对象,匿名类将这些过程简化了。 } } }
匿名类作为方法参数:
class A{ void getval(int n){print ("0");} } class B{ void f(A a){a.getval(3);} } main(){ B b=new B(); b.f(new A(){void getval(int n){print(n*n);}})//匿名类创建的对象作为参数,将该对象的引用船队给方法f的参数a。 }
new A(){void getval(int n){print(n*n);}} (匿名类)等价于创建了一个A的子类,重写了f()方法,然后将该对象作为参数传递给对象a,使其转为上转型对象,这样可以调用匿名类重写的方法。
和接口有关的匿名类:
使用接口和类体创建一个匿名对象。此类体被认为是实现了接口的类去掉类声明的类体,称为匿名类。
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合的方式创建一个匿名对象,传递给方法的参数,类体必须要实现接口中的所有方法。
interface Com{ getval(int n); } void f(Com x){ x.getval(2); } f(new Com(){getval(int n)print(n*n);})//使用匿名类创建对象,将该对象传递给方法f的参数Com 当然也可以使用匿名类创建对象,接口变量存放该对象的引用,可回调实现该接口类中的方法。 Com com=new Com(){getval(int n)print(n*n);} com.getval(4);
相关文章推荐
- Oracle 11g的7个服务详解
- JavaScrip学习(三)---数组
- 线程的五种状态及改变状态的三种方法
- docker学习(2)基本命令
- AIDL进程间调用与Binder的简单介绍
- 计算机程序的构造和解释 练习 1.37
- javascript for...in 和 for of区别
- python 生成html文件
- java如何将长整型的秒数转换成时分秒
- SVN is already locked
- CentOS SSH无密码登录的配置
- c++封装,继承,多态
- 浙大数值分析lab2
- 错误类型“Microsoft.Office.Interop.Word.ApplicationClass”未定义构造函数
- 经典算法题01-百钱百鸡
- 基于省市区展示的tableView多层展开和折叠
- 197. Rising Temperature
- dede功能模块模板路径对应表
- Android Glide 使用与问题处理
- 【转】Beyond Compare for Mac中文版震撼来袭!-- 不错