java核心技术接口与内部类_第1页
java核心技术接口与内部类_第2页
java核心技术接口与内部类_第3页
java核心技术接口与内部类_第4页
java核心技术接口与内部类_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章接口与内部类

/11/1Fridayjava核心技术接口与内部类第1页本章导读:6.1接口6.2对象与克隆6.3接口与回调6.4内部类6.5代理重难点:接口、对象与克隆、接口与回调、内部类/11/1Fridayjava核心技术接口与内部类第2页接口定义:接口是一个与类相同结构,但接口不是类,而是一组对类要求,这些类要与接口一致一个类能够实现一个或多个接口,并在需要接口地方,随时使用实现了对应接口对象接口使用*/将类申明为给定接口*/ClassEmployeeimplementsComparable<Employee>{/*对接口中方法进行定义*/Publicintcomparator(Employeeother){If(salary<other.salary)return-1;If(salary>other.salary)return1;Return0;}····}

/11/1Fridayjava核心技术接口与内部类第3页类特征:接口不是类,不能用new运算符实例化一个接口:eg:x=newComparable(···);//错误能够申明接口变量,接口变量必须引用实现了接口类对象eg:Comparablex;//正确可使用instance检验一个对象是否实现了某特定接口与能够建立类继承关系一样,接口也能够被扩展接口中不能包含实例域或静态方法,但却能够包含常量每个类只能有一个超类,但能够实现多个接口eg:classEmployeeimplementsCloneable,Comparable/11/1Fridayjava核心技术接口与内部类第4页接口和抽象类比较:接口:方法都是抽象一个类可是同时实现多个接口Java语言利用接口机制来实现C++中多继承大部分功效接口能继承多个接口但不能实现另一个接口类假如实现了一个接口,那么必须实现接口里面全部抽象方法,不然类要被定义为抽象类接口只能定义静态常量接口不包含结构方法抽象类:能够含有非抽象方法一个类自能派生自一个抽象类假如将一个类申明为abstract,这类不能生成对象,只能被继承使用子类继承抽象类必须实现其中抽象方法,除非子类为抽象类抽象类能够定义普通常量抽象类能够有结构方法以被继承类扩充/11/1Fridayjava核心技术接口与内部类第5页对象克隆:拷贝原始变量和拷贝变量引用同一个对象克隆变量初始态与原始变量相同,但以后能够各自改变/11/1Fridayjava核心技术接口与内部类第6页浅拷贝是指对象中基本数据类型得到拷贝,而引用数据类型并未拷贝深拷贝是指实现对象中基本数据类型和引用数据类型拷贝。/11/1Friday对象A子对象A1浅拷贝对象B浅拷贝:得到对象B但子对象A1和A2并没有被拷贝子对象A2深拷贝:得到对象C且子对象A1和A2均被拷贝子对象A2子对象A2对象A深拷贝对象B子对象B1子对象B2java核心技术接口与内部类第7页默认克隆操作是浅拷贝对于每个类需要以下判断:1)默认clone方法能否满足要求2)默认clone方法是否能够经过调用可变子对象clone得到修补3)是否不应该使用clone实现深拷贝,类必须:1)实现Cloneable接口2)使用public访问修饰符重新定义clone方法/11/1Friday/*实现cloneable接口*/ClassEmployeeimplementsCloneable{/*将clone重定义为public,调用super.clone*/PbulicObjectclone(){

try{Employeecloned=(Employee)super.clone();Cloned.hirdDay=(Date)hireDay.clone();Returncloned;}Catch(CloneNotSupportedExceptione){Returnnull;}}}java核心技术接口与内部类第8页接口与回调:回调模式是一个常见编程模式,如C/C++中回调函数经过将回调函数地址传给调用者从而实现调用回调技术一个经典应用是用于事件处理Java中使用接口能够实现回调模式ClassTimePrinterimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println(“Atthetone,thetimeis”+now);Toolkit.getDefaultToolkit().beep();}}ActionListenerlistener=newTimePrinter();//接口变量中存放对象引用Timert=newTimer(10000,listener);t.start();//接口回调/11/1Fridayjava核心技术接口与内部类第9页内部类定义:内部类是定义在另一个类中类使用内部类主要原因:内部类方法能够访问该类定义所在作用域中数据,包含私有数据数据内部类能够被同一个包中其它类隐藏起来当想要定义一个回调函数且不想编写大量代码,使用匿名内部类比较便捷申明在接口中内部类自动成为static和public类型。/11/1Fridayjava核心技术接口与内部类第10页publicclassTalkingClock{publicTalkingClock(intinterval,Booleanbeep){···}

publicvoidstart(){···}privateintintereval;

privateintbooleanbeep;/*定义一个TimePriter内部类*/

publicclassTimePrinterimplementsActionListener{

publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println(“Atthetone,thetimeis”+now);/*内部类能够访问外部类数据*/Toolkit.getDefaultToolkit().beep();}}/11/1Fridayjava核心技术接口与内部类第11页内部类特殊语法规则:内部类对于外部引用正确语法是:

OuterClass.this--表示了外部类一个引用。 如:InterestAddr是BankAccount中内部类,其中InterestAddr中actionPerfomed方法引用BankAccount中变量采取方式是:

publicvoidactionPerformed(ActionEventevent){ doubleinterest= BankAccount.this.balance*this.rate/100; }内部类对象结构器能够显式表示,语法以下:

ActionListeneraddr=this.new.InterestAddr(constructionparameters); Notes:若内部类InterestAddr是个公有类,那么在程序其它地方使用BankAccount.InterestAddr来引用它。/11/1Fridayjava核心技术接口与内部类第12页局部内部类定义在外部类方法中类;1)局部内部类不使用访问指示符,它们范围总是限定在他们程序块中;2)局部内部类含有最大隐藏性;3)局部内部类能够访问外部类所在方法中局部变量,但局部变量必须申明为final类型。4)局部类方法只能使用那些申明为final局部变量,因为申明为final变量后,变量就不可能随便进行修改,这么,局部变量和局部类所建立变量拷贝总是含有相同值/11/1Fridayjava核心技术接口与内部类第13页匿名内部类:只创建这个类一个对象,就无须为它命名了,这种类被称为匿名内部类。匿名内部类语法:

newSuperType(constrcutionparameters){

内部类方法和数据;

} newinterfacename(constrcutionparameters){ 内部类方法和数据;

}匿名内部类主要用在方便地定义运行时回调,以及编写事件驱动方面。因为结构器名字必须和类名相同,而匿名类没有类名,所以匿名类不能有结构器。/11/1Fridayjava核心技术接口与内部类第14页静态内部类:假如只想内部类隐藏在另一个类中,而不需要内部类含有对外部类对象引用,这种情况下,就能够将内部类申明为static类型,形成静态内部类。静态内部类假如在一个方法中结构,这个方法必须是静态方法。静态内部类对象除了没有对生成它外围类对象引用特权外,与其它内部类完全一样。/11/1Fridayjava核心技术接口与内部类第15页代理:要创建一个代理对象,需用Proxy类newProxyInstance方法。方法中三个参数:1)一个类加载器。不一样类能够使用不一样类加载器2)一个class对象数组,每个元素都是要实现接口;3)一个调用处理器。使用代理原因:路由对远程服务器方法调用在程序运行期间,将用户接口事件与动作关联起来为调试,跟踪方法调用/11/1Fridayjava核心技术接口与内部类第16页代理类特征:代理类是在程序运行过程中创建,一旦创建就与常规类没有区分。代理(Proxy)类只有一个实例域,即调用处理器,代理类需要额外数据都必须存放在调用处理器中对于特定类加载器和接口来说,只能有一个代理类。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论