已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计实例教程,第 4章 面向对象高级技术,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,4.1 继承基础,面向对象的优势在于代码的复用,继承是实现代码复用的重要手段,Java的继承采用单继承机制,即每个子类只能继承一个父类。被继承的类称为父类(Superclass),而实现继承的类称为子类(Subclass),子类和父类是一种特殊与一般的关系。通过继承,子类继承父类的非私有属性与方法,并且还可以在子类中添加自己的属性和方法。当然父类也可以限制子类继承父类的某些属性和方法,只需要更改父类的某些属性和方法的访问控制修饰符即可。,类的继承,class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is :”+car_number); ,4.1 继承基础,class TrashCar extends Car int capacity; void set_capacity(int trash_car_capacity) capacity=trash_car_capacity; void show_capacity() System.out.println(“My capacity is: ” + capacity); ,4.1 继承基础,Car是父类,TrashCar是子类。TrashCar中继承了Car中的两个方法,同时又增加了两个新方法。,4.1 继承基础,继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。Java中不支持多重继承。通过在类的声明中加入extends子句来创建一个类的子类: class SubClass extends SuperClass 如果缺省extends子句,则该类为java.lang.Object的子类。 子类可以继承父类中访问权限设定为public、 protected、 default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。,2、Java中的类、方法和变量 继承,4.1 继承基础,何时使用继承,何时选择继承? 一个很好的经验:“B是一个A吗?” 如果是则让B做A的子类.,常犯的错误A有一个B吗? 例如让汽车轮子成为汽车的子类是错误的,在更多的时候,组成(聚集)关系比继承更能使系统具有高度的灵活性,可维护行,并且提高系统的可重用性。,继承与组合,4.1 继承基础,4.1 继承基础,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,4.2 覆盖,子类中的某些方法名及形参列表与父类中的方法名和形参列表完全相同,那么这种情况称为方法的覆盖(Override),也称为方法的重写。相应地,如果父类中的成员变量与子类的成员变量重名,称为变量的覆盖。,类方法的覆盖 方法覆盖即指在子类中重新定义父类中已有的方法。,class Car int color_number; int door_number; int speed; public void push_break() speed = 0; public void add_oil() ,class Trash_Car extends Car double amount; public void fill_trash() public void push_break() speed = speed 10; ,4.2 覆盖,覆盖方法的调用 对于重写的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。,public class DemoCar public static void main( String args ) Car aCar = new Trash_Car( ); aCar. push_break( ); ,在这里, 类Trash_Car中的push_break( )方法将被调用。,4.2 覆盖,方法覆盖时应遵循的原则 (1)覆盖后的方法不能比被覆盖的方法有更严格的访问权限。 (2)覆盖后的方法不能比被覆盖的方法产生更多的异常。,4.2 覆盖,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,4.3 super关键字,super指这个对象的父类。super可以用来引用父类中的(被覆盖的)方法、(被隐藏的)变量及构造方法。,public class apple extends fruits public apple(int price) super(price); super.var = value; super.method(paraList); ,以上程序表示使用父类的构造方法生成实例,super必须是子类构造方法的第一条语句。,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,4.4 Object类,java.lang包提供了Object类,而且Object类是所有类直接或间接的父类,包括自定义类和JDK提供的类。如果一个类在定义时没有用extends关键字显式地指定所继承的父类时,那么Java将隐式地指定该类继承Object类,因此我们可以说所有类都是Object类的子类。 Java程序同样会自动导入java.lang包,因此程序中无需显式地使用import java.lang.*;语句。 Object类中提供了一些方法如clone()、toString()、equals()、finalize()、hashCode()、getClass()、notify()、notifyAll()、wait()等。,4.4 Object类,toString()方法,4.4 Object类,出现问题的原因在于Object类的toString()方法,需要重写Men类的toString()方法:,public String toString() return “Name: “ + + “, Age: “ + this.age; ,toString()方法,4.4 Object类,Object类还提供了equals()方法用于比较两个对象的是否相等,并且如果两个对象相等时会返回true。需要注意的是Object类提供的equals()方法相当于“=”运算符,即比较两个对象在内存中的地址值。,equals()方法,4.4 Object类,出现问题的原因在于Object类的equals()方法,需要重写Men类的equals()方法:,public boolean equals(Object object) /判断object是否为空并且是否是Men类 if(object != null ,equals()方法,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9, final:到此为止,final在类之前 表示该类是最终类,不能再被继承。 final在方法之前 表示该方法是最终方法,该方法不能被任何派生的子类覆盖。 final在变量之前 表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。,4.5 final关键字,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,4.6 多态,所谓向上转型是声明父类变量后却在实例化时创建一个子类的实例。 Father f = new Son();, 向上转型,向下转型与向上转型相反,由于Java只能访问编译时类型的成员,无法访问运行时类型的成员,如果需要让引用变量访问运行时类型的成员,则需要借助于向上转型,向上转型需要强制转换,并利用强制类型转换运算符实现。,4.6 多态, 向下转型,4.6 多态,instanceof运算符用来判断一个操作数是否属于某种数据类型,如果属于这种数据类型返回true,否则返回false。具体的语法格式如下:, instanceof关键字,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,抽象类与抽象方法,抽象类:用abstract关键字来修饰一个类时,该类叫做抽象类; 抽象类必须被继承。 抽象类不能被直接实例化。它只能作为其它类的超类,这一点与最终类(final类)正好相反。 抽象方法:用abstract来修饰一个方法时,该方法叫做抽象方法。 抽象方法必须被重写 抽象方法只有声明,不能有实现。 定义了抽象方法的类必须是抽象类。 abstract returnType abstractMethod ( paramlist );,4.7 抽象类,两个类Circle和Rectangle,完成相关参数的计算,class Rectangle public float width,height; Rectangle (float w, float h) width = w; /这里不需“this“ height = h; public float area() return width*height; ,class Circle public float r; Circle(float r) this.r = r; /this指“这个对象的“ public float area() return 3.14*r*r; ,抽象类与抽象方法,4.7 抽象类,假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个循环,加上一个加法,这种做法是不漂亮的。 如果还有其它形状:Triangle,Ellipses等,上述方法显得“累赘”。我们希望有一种统一的表示,例如用一个数组shape,接受所有的形状,然后用: for (i=0; ishape.length; i+) area_total += shapei.area(); ,抽象类与抽象方法,4.7 抽象类,4.7 抽象类,4.7 抽象类,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,接口(interface)就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。 通过接口可以指明多个类需要实现的方法。 通过接口可以了解对象的交互界面,而不需了解对象所对应的类。,接口,4.8 接口,接口的定义: public interface interfaceName extends SuperInterfaceList /常量定义和方法定义 ,接口(interface)作为特殊形式的抽象类,和类(class)在使用上具有类似的约束。 与类继承不同,一个接口可以继承多个父接口 一个public接口只能定义在同名的.java文件中,4.8 接口,用implements子句来表示一个类使用某个接口。 在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。 利用接口可实现多重 继承,即一个类可以实现多个接口,在implements子句中用逗号分隔。 接口的作用和抽象类相似,只定义原型,不直接定义方法的内容。 接口中的方法和变量必须是public的。,4.8 接口,interface Collection int MAX_NUM=100; void add (Object obj); void delete (Object obj); Object find (Object obj); int currentCount ( ); ,class FIFOQueue implements Collection void add ( Object obj ) void delete( Object obj ) Object find( Object obj ) int currentCount() ,4.8 接口, Collection, List,ArrayList,LinkedList,AbstractCollection,AbstractList,java.util类包中的一些接口,4.8 接口,接口和抽象类有很多相似的地方: 接口和抽象类都可以含有抽象方法,实现接口或者继承抽象类的子类必须实现这些抽象方法,否则子类也必须定义成抽象类; 接口和抽象类一般都用在继承层次结构中的顶层,二者都不能被实例化。 当然接口和抽象类也有很多不同之处: 接口中的方法必须全部是抽象方法,而抽象类中则可以包含0或多个抽象方法,甚至该抽象类的所有方法全部是抽象方法; 接口支持多重继承,能够同时继承多个父接口,但抽象类是单重继承,只能同时继承一个父类; 接口中只能包含static final类型的成员变量和抽象方法,不能有构造方法。而抽象类中既可以包含所有类型的变量(成员变量和局部变量)以及方法,还可以包含构造方法; 一个类可以同时实现多个接口(即变相地支持多重继承),但是子类只能同时继承一个抽象类。,4.8 接口,本章要点,1,覆盖,2,3,super关键字,继承基础,Object类,final关键字,多态,抽象类,接口,内部类,4,5,6,7,8,9,4.9 内部类,内部类的语法规范:,4.9 内部类,内部类像类的其它成员一样,是类的组成部分。如果内部类有static修饰,则此内部类称为静态内部类,否则称为非静态内部类。外部类是否可以访问静态内部类和非静态内部类中的成员取决于这些成员的访问控制修饰符。定义在方法中的内部类称为局部内部类,它的作用域仅在该方法中有效;匿名内部类常常用来接口或者抽象类,且在定义时直接使用new运算符调用它一次有总被执行一次。,本章小结,本章首先介绍了继承和多态两个面向对象技术的高级特性,并介绍了抽象类和接口以及内部类。 Java提供了单继承机制,通过使用e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版高血压常见症状分析及护理指导
- 天门科技馆介绍
- 视网膜病变的治疗方法
- 病房物品保管宣教
- 2025版代谢病常见症状及护理注意事项
- 铱星组网协议书
- 2025-2026学年安徽省宿州市五年级道德与法治上册期中考试试卷及答案
- 苏课新版二年级生物上册月考考试试题及答案
- 京津冀合作框架协议书
- 流感病常见表现及护理指南培训
- 采样来料检验规范
- 肋骨骨折患者护理查房
- 护理压疮不良事件分析
- 重庆市潼南区2023-2024学年七年级下学期语文期中试卷(含答案)
- 丰收节发言稿
- 第三单元参考活动1《续一个南社的梦》教学设计 2024-2025学年苏少版初中综合实践活动八年级上册
- GB/T 19973.2-2025医疗产品灭菌微生物学方法第2部分:用于灭菌过程的定义、确认和维护的无菌试验
- 中国重症患者肠外营养治疗临床实践专家共识(2024)解读
- 软件系统试运行方案计划
- 山东省枣庄市薛城区2024-2025学年八年级上学期11月期中数学质量检测试题(附答案)
- 江苏省南京市鼓楼区2024-2025学年七年级上学期期中数学试卷(含答案解析)
评论
0/150
提交评论