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

下载本文档

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

文档简介

第六章 接口与内部类,2019/5/27,本章导读:,6.1 接口 6.2 对象与克隆 6.3 接口与回调 6.4 内部类 6.5 代理 重难点:接口、对象与克隆、接口与回调、内部类,2019/5/27,接口定义: 接口是一种与类相似的结构,但接口不是类,而是一组对类的要求,这些类要与接口一致 一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象 接口的使用 */将类声明为给定的接口*/ Class Employee implements Comparable /*对接口中的方法进行定义*/ Public int comparator(Employee other) If(salaryother.salary) return 1; Return0; ,2019/5/27,类的特性:,接口不是类,不能用new运算符实例化一个接口: eg: x=new Comparable(); /错误 可以声明接口的变量,接口变量必须引用实现了接口的类对象 eg: Comparable x; /正确 可使用instance检查一个对象是否实现了某特定接口 与可以建立类的继承关系一样,接口也可以被扩展 接口中不能包含实例域或静态方法,但却可以包含常量 每个类只能有一个超类,但能够实现多个接口 eg : class Employee implements Cloneable, Comparable,2019/5/27,接口和抽象类的比较:,接口:,方法都是抽象的 一个类可是同时实现多个接口 Java语言利用接口机制来实现C+中的多继承的大部分功能 接口能继承多个接口但不能实现另一个接口 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类 接口只能定义静态常量 接口不包含构造方法,抽象类:,可以含有非抽象的方法 一个类自能派生自一个抽象类 如果将一个类声明为abstract,此类不能生成对象,只能被继承使用 子类继承抽象类必须实现其中抽象方法,除非子类为抽象类 抽象类可以定义普通常量 抽象类可以有构造方法以被继承类扩充,2019/5/27,对象克隆:,拷贝原始变量和拷贝变量引用同一个对象 克隆变量的初始态与原始变量相同,但以后可以各自改变,2019/5/27,浅拷贝是指对象中基本数据类型得到拷贝,而引用数据类型并未拷贝 深拷贝是指实现对象中基本数据类型和引用数据类型的拷贝。,2019/5/27,对象A,子对象A1,浅拷贝对象B,浅拷贝:得到对象B但子对象A1和A2并没有被拷贝,子对象A2,深拷贝:得到对象C且子对象A1和A2均被拷贝,子对象A2,子对象A2,对象A,深拷贝对象B,子对象B1,子对象B2,默认的克隆操作是浅拷贝 对于每个类需要下列判断: 1)默认的clone方法能否满足要求 2)默认clone方法是否能够通过调用可变子对象的clone得到修补 3)是否不应该使用clone 实现深拷贝,类必须: 1)实现Cloneable接口 2)使用public访问修饰符重新定义clone方法,2019/5/27,/*实现cloneable接口*/ Class Employee implements Cloneable /*将clone重定义为public,调用super.clone*/ Pbulic Object clone() try Employee cloned=(Employee)super.clone(); Cloned.hirdDay=(Date)hireDay.clone(); Return cloned; Catch(CloneNotSupportedException e) Return null; ,接口与回调:,回调模式是一种常见的编程模式,如C/C+ 中的 回调函数通过将回调函数的地址传给调用者从而 实现调用 回调技术的一个典型应用是用于事件处理 Java中使用接口可以实现回调模式 Class TimePrinter implements ActionListener public void actionPerformed(ActionEvent event) Date now=new Date(); System.out.println(“At the tone,the time is”+now); Toolkit.getDefaultToolkit().beep(); ActionListener listener=new TimePrinter(); /接口变量中存放对象的引用 Timer t=new Timer(10000,listener); t.start(); /接口回调,2019/5/27,内部类,定义:内部类是定义在另一个类中的类,使用内部类的主要原因: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 数据 内部类可以被同一个包中的其他类隐藏起来 当想要定义一个回调函数且不想编写大量代码 ,使用匿名内部类比较便捷 声明在接口中的内部类自动的成为static和public类型。,2019/5/27,public class TalkingClock public TalkingClock(int interval,Boolean beep) public void start() private int intereval; private int boolean beep; /*定义一个TimePriter内部类*/ public class TimePrinter implements ActionListener public void actionPerformed(ActionEvent event) Date now=new Date(); System.out.println(“At the tone,the time is”+now); /*内部类可以访问外部类数据*/ Toolkit.getDefaultToolkit().beep(); ,2019/5/27,内部类的特殊语法规则: 内部类对于外部引用的正确语法是: OuterClass.this表示了外部类的一个引用。 如:InterestAddr是BankAccount中的内部类,其中InterestAddr中的actionPerfomed方法引用BankAccount中的变量采用的方式是: public void actionPerformed(ActionEvent event) double interest = BankAccount.this.balance * this.rate/100; 内部类的对象构造器可以显式表示,语法如下: ActionListener addr this.new.InterestAddr(construction parameters); Notes:若内部类InterestAddr是个公有类,那么在程序的其它地方使用BankAccount.InterestAddr来引用它。,2019/5/27,局部内部类定义在外部类方法中的类; 1)局部内部类不使用访问指示符,它们的范围总是限定在他们的程序块中; 2)局部内部类具有最大的隐藏性; 3)局部内部类可以访问外部类所在方法中的局部变量,但局部变量必须声明为final类型。 4) 局部类的方法只能使用那些声明为final的局部变量,由于声明为final变量后,变量就不可能随便进行修改,这样,局部变量和局部类所建立的变量拷贝总是具有相同的值,2019/5/27,匿名内部类:只创建这个类的一个对象,就不必为它命名了,这种类被称为匿名内部类。 匿名内部类语法: new SuperType(constrcution parameters) 内部类方法和数据; new interfacename(constrcution parameters) 内部类方法和数据; 匿名内部类主要用在方便地定义运行时的回调,以及编写事件驱动方面。 由于构造器的名字必须和类名相同,而匿名类没有类名,所以匿名类不能有构造器。,2019/5/27,静态内部类:如果只想内部类隐藏在另一个类中,而不需要内部类具有对外部类对象的引用,这种情况下,就可以将内部类声明为static类型,形成静态内部类。 静态内部类如果在一个方法中构造,这个方法必须是静态的方法。 静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他内部类完全一样。,2019/5/27,代理: 要创建一个代理对象,需用Proxy类的newProxyInstance方法。 方法中的三个参数: 1)一个类加载器。不同的类可以使用不同的类加载器 2)一个class对象数组,每个元素都是要实现的接口; 3)一个调用处理器。 使用代理的原因: 路由对远程服务器的方法调用 在程序运行期间,将用户接口事件与动作关联起来 为调试,跟踪方法调用,2019/5/27,代理类的特性: 代理类是在程序运行过程中创建,一旦创建就与常规类没有区别。 代理(Proxy)类只有一个实例域,即调用处理器,代理类需要的额外数据都必须存储在调用处理器中 对于特定的类加载器和接口

温馨提示

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

评论

0/150

提交评论