




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术学院赵志崑zhaozk,Java程序设计,面向对象技术的核心机制,面向对象技术的三个核心机制:封装:将数据和操作组合到一起,并决定哪些数据和操作对外是可见的。继承:父类中的变量和行为,子类可以同样使用。本质是代码重用。多态:由继承引出的一种机制,父类型的引用变量可以指向子类型的对象。,封装,封装把对象的所有组成部分组合在一起,有三个作用隐藏类的实现细节:使用方法将类的数据隐藏起来。迫使用户去使用一个界面去访问数据:定义程序如何引用对象的数据,控制用户对类的修改和访问数据的程度。使代码更好维护:类的内部实现改变,接口可以不变。,可见性,在变量和方法声明时,加可见性修饰:public:任何其它类、对象只要可以看到这个类,就可以存取变量,或使用方法。private:不允许任何其他类存取和调用。protected:子类可以使用,同一包中的其他类也可以使用。friendly(前边没有修饰字的情况):在同一程序包中的类可以直接使用它的数据和方法。,可见性举例,classStudentprivatelongid;/变量一般都声明为私有privatechargender;/以防止其他对象任意更改privateintclassID;publiclonggetID()returnid;/方法一般是对外提供服务的publicbooleansetID(longaID)/所以声明为公共的if(aID=0)id=aID;returntrue;elsereturnfalse;publicstaticvoidmain(Stringargs),继承,继承提供了创建新类的一种方法,本质特征是行为共享。继承对开发者来说就是代码共享与重用。通过继承创建的子类是作为另一个类的扩充或修正所定义的一个类。子类从超类(父类)中继承所有方法和变量。子类和超类之间是特化与范化的关系。,子类的声明,关键字extends:声明一个类是派生自某个已知类。子类继承父类除private成员外的所有成员,就像这些变量和方法是自己定义的一样,相当于公开继承。Java中,如果类声明时没有声明父类,那么缺省为Object类的子类。Java中的所有类都是Object类的子类。Object类定义了类的一些基本行为,如clone,toString,equals等。,classCarintcolorNumber;intdoorNumber;intspeed;pushBreak()addOil(),classTrashCarextendsCardoubleamount;fillTrash()TrashCarmyCar=newTrashCar();myCar.addoil();,Java中继承的特点,子类不从父类继承构造函数。单继承性:Java编程语言允许一个类仅能直接扩展自一个其它类,即extends关键字后面只能跟一个类名。单继承性使代码更可靠。单根继承:Java中,如果类声明时没有声明父类,那么缺省为Object类的子类。Java中的所有类都是Object类的子类。类库文档:对一个继承的方法或变量的描述只存在于对该成员进行定义的类的API文档中。,覆盖,当用于子类的行为与父类的行为不同时,覆盖机制允许子类可以修改从父类继承来的行为。覆盖就是在子类中创建一个与父类方法有不同功能的方法,但具有相同的名称、返回类型和参数表。若参数表不同,则不是覆盖,而是重载。若参数表相同,但返回值不同,则编译出错。覆盖时,子类的方法只能具有与父类相同或更大可见性覆盖时,子类的方法不能抛出比父类更多的异常,classCarintcolorNumber;intdoorNumber;intspeed;voidpushBreak()speed=0;voidaddOil(),classTrashCarextendsCardoubleamount;voidfillTrash()voidpushBreak()speed=speed-10;,super关键字,通常当覆盖一个方法时,实际目的不是要更换现有的行为,而是要在某种程度上扩展该行为。此时应先执行父类的行为,然后再执行扩展部分的行为。这种情况下用super关键字调用父类的行为。在子类构造函数中,可以用super调用父类构造函数。,classCarintcolorNumber;intdoorNumber;intspeed;voidpushBreak()speed=0;voidaddOil(),classTrashCarextendsCardoubleamount;voidfillTrash()voidpushBreak()super.pushBreak();speed+=5;,重载,重载指在同一个类中至少有两个方法用同一个名字,但有不同的参数。重载使得从外部来看,一个操作对于不同的参数对象有不同的处理方法。调用时,根据参数的不同来区别调用哪个方法。方法的返回类型可以各不相同,但它不足以使返回类型变成唯一的差异。重载方法的参数表必须不同。,classCarintcolorNumber;intdoorNumber;intspeed;voidpushBreak()speed=0;voidpushBreak(intaDeltaSpeed)speed-=aDeltaSpeed;voidadd_oil(),重载和覆盖的区别,相同点:都涉及两个同名的方法。不同点:类层次重载涉及的是同一个类的两个同名方法;覆盖涉及的是子类的一个方法和父类的一个方法(同名)。参数和返回值重载的两个方法具有不同的参数,可以有不同返回值类型;覆盖的两个方法具有相同的参数,返回值类型必需相同。,构造函数重载问题,问题:一个类可以有多个构造函数。这些构造函数功能类似,只有参数不同。这些构造函数之间需要互相调用。解决:在一个构造函数中调用另外一个构造函数使用this关键字。,构造函数与重载,如果要在一个构造函数中调用另一个构造函数,可以通过使用关键字this。注意,此时带有this的调用在任何构造函数中必须是第一个语句。例如:publicclassEmployeeprivateStringname;privateintsalary;publicEmployee(Stringn,ints)name=n;salary=s;publicEmployee(Stringn)this(n,0);publicEmployee()this(Unknown);,构造函数覆盖问题,问题:子类继承父类的所有变量,因此,子类在构造函数中应该包括对父类变量的初始化。子类不继承父类的构造函数。子类构造函数如果直接对父类实例变量初始化则破坏了封装。解决:Java允许子类构造函数调用父类构造函数,使用super关键字。,调用父类构造函数,当一个对象被初始化时,下述行为按顺序发生:存储空间被分配并初始化到0值继承层次中的每个类都按顺序进行显式初始化,父类构造函数先执行。publicclassEmployeeprivateStringname;publicEmployee(Stringn)name=n;publicclassManagerextendsEmployeeprivateStringdepartment;publicManager(Strings,Stringd)super(s);department=d;如果一个构造函数既没有调用super()也没有调用this(),编译器自动插入一个对父类构造函数的调用,而且不带参数,super()。上例中,若去掉红色的super语句,编译将报错。,构造函数定义错误举例,下面的类声明会产生编译错误,classGeometricObjectprivateStringname;publicGeometricObject(StringaName)name=aName;classEllipseextendsGeometricObject,原因:类Ellipse没有定义构造函数,Java自动为其定义一个Ellipse()。构造函数Ellipse()既没有调用super()也没有调用this(),编译器自动插入一个对父类构造函数的调用super(),相当于调用GeometricObject()。类GeometricObject定义了构造函数GeometricObject(StringaName),系统不会再为其定义缺省构造函数GeometricObject()。,多态,继承机制引出多态机制某一类型的引用变量可能是指向该类或者其子类的对象。由于Java中Object类是所有类的祖先,所以可以用Object类型的引用指向所有类型的对象。,classCarintcolorNumber;intdoorNumber;intspeed;voidpushBreak()voidaddOil(),classTrashCarextendsCardoubleamount;fill_trash()CarmyCar=newTrashCar();,动态绑定,为支持多态机制,Java调用一个对象的方法时采用动态绑定的方式。动态绑定就是在运行时再根据对象的类型决定调用哪个方法,而不是引用的类型。,classShapepublicvoiddraw()classEllipseextendsShapepublicvoiddraw()publicvoidgetCenter()classCircleextendsEllipsepublicvoiddraw()publicdoublegetArea(),Shapeg=newCircle();/父类型引用指向子类型对象g.draw();/draw调用的是哪个类的方法?/如果g换成Circle类引用呢?/如果Circle类不覆盖draw方法,调用的是哪个类的方法?doubled=g.getArea();/编译时能否通过。,动态绑定示意图,引用的类型限制了能够看到的对象的能力。实际调用的是对象所属类的方法,与引用的类型无关。,单继承性和接口,Java的单继承性使得类结构成为以Object类为根的一棵树。,Java用接口(interface)来获得多继承性。接口克服了多继承性带来的一些问题。,Object类,Object类是Java中所有类的超类。单继承性带来的好处:Object类定义了类应该提供的一些基本功能,几个重要方法如(自定义的类一般都要覆盖定义):equals方法:用于测试一个对象的内容是否和另一个对象相等,注意与两个对象引用相等的区别。toString方法:将对象内容写到字符串中,可用于将对象打印输出。clone方法:将对象复制一份。由于多态性,可以用Object类型的引用指向所有类型的对象。因此,许多通用编程成为可能,如动态数组(ArrayList,Vector)、集合、堆栈、链表等等。,接口,声明:用interface关键字,声明中只指定原型,不直接定义方法的内容。实现:类要实现某个接口用implements关键字,在类的定义中给出接口中所定义方法的实际实现。接口中的方法和变量都是public的。对于变量,自动(且只能)为staticfinal成员变量。一个类可以实现多个接口。,interfaceComparableintcompareTo(Objectother);classStudentimplementsComparableprivatelongid;publicvoidsetID(longaID);publicintcompareTo(ObjectotherObject);Studentother=(Student)otherObject;if(idother.id)return1;return0;Student类的对象数组可以在Arrays中进行排序等操作。,使用接口,接口用于下面一些情况:声明方法,期望一个或更多的类来实现该方法。决定一个对象的编程界面,而不揭示类的实际程序体。捕获无关类之间的相似性,而不强迫类关系。回调功能,如图形界面中的事件处理、排序(sort)方法需要用到比较(compareTo)方法等。接口与对象:接口不是类,所以不能用接口创建对象,即不能用new运算符。x=newComparable();/错误可以声明接口类型的引用,该引用只能指向实现了该接口的对象。一个使用的例子在Java库源代码的Arrays.java文件1144行mergeSort方法。classStudentimplementsComparable.Comparablex;x=newStudent();,接口继承,接口也可以继承,同类继承一样,也使用extends关键字。如:interfaceListIteratorextendsIteratorvoidadd(Objecto);子接口继承父接口的所有变量和方法声明,用于扩大接口的功能。实现子接口的类必须实现父接口和子接口中的所有方法。,作业(实验),设计类,使用对象和引用设计以下几个类及其继承关系:几何形状(Shape)、正方形(Square)、矩形(Rectangle)、椭圆(Ellipse)、圆形(Circle)。根据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修工程现场保护合同样本
- 校服采购项目 投标方案(技术方案)【配图】
- 三农工作绩效考核与评估手册
- 机械工程原理应用及技术创新练习题集
- 三农产品电子商务标准制定与实施指南
- 加强信息安全管理策略与技术培训的实施计划
- 风险评估与监测系统操作规程
- 杭州市艺术馆租赁合同
- 成都可行性研究分析报告
- 农业气象服务应用指南
- 2024-2025学年第二学期天域全国名校协作体高三3月联考 地理试卷(含答案)
- 学校2025年每日两小时体育活动方案-阳光体育活力四溢
- B超的基本知识
- 锤击式PHC预应力混凝土管桩贯入度的控制
- 2025年广西旅发置业集团有限公司招聘笔试参考题库含答案解析
- 2025年人教版新教材数学一年级下册教学计划(含进度表)
- GB/T 45107-2024表土剥离及其再利用技术要求
- 叙事医学培训课件
- 《劳动纪律》课件
- 小学数学一年级上册数与代数
- 失能老年人健康管理模式研究进展
评论
0/150
提交评论