




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六讲 面向对象高级特性(下),主要内容,引用类型转换 动态绑定 抽象类 接口 内部类,引用类型转换,子类对象可以当成父类对象使用(父类的引用类型变量可以指向子类的对象) 不能通过父类的引用访问子类对象新增加的成员 父类引用只有经过强制转换后才能赋值给子类引用变量 语句“引用变量名 instanceof 类名”作用:判断该引用类型变量所指向的“对象”是否属于该类,引用类型转换,【例1】请分析下面代码的输出结果,理解引用类型转换的规则。,引用类型转换,【例2】请阅读下面代码,理解引用类型转换能够给程序带来较好的扩展性。,动态绑定,动态绑定是一种调用对象方法的机制,指的是在运行期间,虚拟机将调用对象实际类型所对应的方法。 动态绑定三个必要条件: 1)继承 2)重写 3)父类引用指向子类对象,动态绑定,【例1】分析下面代码的输出结果。,动态绑定,【例2】分析下面代码的输出结果。,抽象类,1抽象方法: 不含有任何方法体的方法。抽象方法必须用abstract关键字进行定义。例如, public abstract int func1(int a,int b) ; 2. 抽象类: 包含抽象方法的类。抽象类也必须用abstract关键字进行定义。例如, abstract class test1 public abstract int func1(int a,int b); ,抽象类,3. 抽象类中,可以包含抽象方法和非抽象方法。例如, abstract class test1 abstract int f(int a,int b);/抽象方法 void func2()/非抽象方法 ,抽象类,4、抽象类不能被实例化。 5、抽象类能够被继承。只有当子类实现了父类的所有抽象方法,该子类才能够被实例化。否则,它还是一个抽象类。,抽象类,【例题】设计一个类层次,定义一个抽象类-形状,其中包括求形状的面积的方法。继承该类定义矩形、圆。 分别创建一个矩形、圆存入一个数组中,将数组中各类图形的面积输出。,接口,1. 什么是接口? 接口是抽象方法和常量的集合。定义一个接口 使用interface关键字。例如, interface Runner int ID = 1; /常量 void run(); /抽象方法 ,接口,2. 接口的特性 接口中的方法默认具有public和abstract属性; 接口中的变量默认具有public、static、final属性。 3. 使用extends关键字定义一个新的接口。,接口,4. 使用implements关键字定义一个类,实现接口中的所有抽象方法。例如, class Fish implements Animal public void run() /方法前必须有public System.out.println(“Fish is swimming“); public void breathe() System.out.println(“Fish is budding“); ,接口,5. 如果类中只实现了接口中的部分方法,那么这个类必须定义为抽象类。 6. 一个类在继承父类的同时,还可以实现一个或多个接口。,接口,【例题】一个类可以实现多个接口,从而达到多继承。,接口,【例题】下面代码使用接口实现了银行账户的存取款。,接口,【例题】模拟银行之间的转账。,接口,【例题】接口和实现它的类之间存在着多态性。,Java语言允许在类的内部再定义类,这种类称为内部类。包含内部类的类称为外部类。 内部类具有成员变量和成员方法。通过建立内部类的对象,可以存取其成员变量和调用其成员方法。 内部类的类名只能定义在它的类或语句块之内,在外部引用时必须给出完整的名称。内部类的类名不能与包含它的外部类名相同。,内部类,1. 成员内部类方法能够直接访问外部类成员。 【例题】 class Outer int outer_i=10; void test() Inner in=new Inner(); void test1() class Inner void display() System.out.println(“outer_i=“+outer_i); test1(); /直接访问外部类成员 public static void main(String args) Outer outer=new Outer(); outer.test(); ,成员内部类,成员内部类,2. 外部类方法不能直接访问成员内部类的成员。 3. 成员内部类中不能定义static成员。 4. 成员内部类对象的创建方式: (1) 在外部类方法中,直接创建 (2) 在main方法中,通过外部类对象创建内部类对象 Outer.Inner in2=outer.new Inner(); Outer.Inner in1=new Outer().new Inner();,静态内部类,1. 静态内部类不能直接访问外部类的非静态成员 2. 静态内部类可以直接访问外部类的静态成员 3. 静态内部类可以定义静态成员 4. 如果静态内部类与main函数位于同一个类中,那么静态内部类可以直接在main函数中创建;如果它们位于两个不同的类中,那么必须使用:Outer.Inner in=new Outer.Inner();创建静态内部类对象。,本地内部类,1. 本地内部类: 在语句块或者方法中定义的类。 2. 本地内部类仍然可以访问外部类的成员。 3. 本地内部类不能直接访问方法的局部变量(不包括final变量)。 4. 本地内部类的作用范围仅限于包含它的语句块或者方法中。,匿名内部类,匿名内部类是一个没有类名,但是具有类体定义的内部类,一般用在图形用户界面设计事件处理中。,匿名内部类,【例题】接口、匿名内部类的综合实例。 interface PCI /定义一个接口 void start(); void stop(); class NetWorkCard implements PCI /实现接口PCI public void start() System.out.println(“send.“); public void stop() System.out.println(“stop.“); ,匿名内部类,【例题】接口、匿名内部类的综合实例。(续1) class SoundCard implements PCI /实现接口PCI public void start() System.out.println(“dudu“); public void stop() System.out.println(“sound stop“); class MainBoard /定义一个MainBoard类 public void UsePCICard(PCI p) p.start(); p.stop(); ,匿名内部类,【例题】接口、匿名内部类的综合实例。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业领域的新能源技术优化与创新
- 工业设计与产业创新发展分析报告
- 工业设计创新与市场应用研究
- 工作效率提升工具与方法介绍
- 工业风办公室装修风格及案例分享
- 工厂智能化改造的商业价值分析
- 工程施工质量通病防治措施
- 工程机械液压系统的故障处理
- 工程地质学建筑基础稳定性研究
- 工程项目管理与质量保障
- 氨区作业安全培训课件
- 2025内蒙古中考:生物必背知识点
- 2025年湖北省新高考信息卷(一)化学试题及答案
- 岩土工程设计课件
- 智能消防无人机行业深度调研及发展战略咨询报告
- 瓷砖期付款合同协议
- Unit 1 Animal Friends Reading Plus教学设计-2024-2025学年人教版英语七年级下册
- 汽车维修厂设备管理制度
- 井巷工程知到智慧树章节测试课后答案2024年秋山东科技大学
- 2025年乡村振兴课件
- 启东市吕四港海洋牧场乌龙沙人工鱼礁建设项目报告表
评论
0/150
提交评论