




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-理解继承和多态的概念掌握继承、多态的实现和使用掌握super、final关键字的使用掌握Object类了解依赖、关联、聚合、组成关系目标-2-类间关系在面向对象的系统中,通常不会存在孤立的类,类之间、对象之间总是存在各种各样的关系,按照UML(UnifiedModelingLanguage,统一建模语言)规范,类之间存在六种关系:继承、实现、依赖、关联、聚合、组成
。UML的六种关系中,继承和实现是一种纵向的关系,而其余四种是横向关系。其中关联、聚合、组成关系在代码上是无法区分的,更多的是一种语义上的区别。-3-继承-1关于继承
在Java中,被继承的类叫父类(parentclass)或超类(superclass),继承父类的类叫子类(subclass)或派生类(derivedclass)。在Java中,关键字“extends”表示继承,后面紧跟父类的类名,格式如下:<access><modifiers>classSubClassextendsSuperClass{//......}例如:publicclassCatextendsAnimal{......}-4-继承-2继承的实例分析在一个学校的人事管理系统中,要存储教师和学生的信息,现采用面向对象思想分析得到教师类和学生类。其属性如下所示:教师类(Teacher)学生类(Student)姓名name姓名name年龄age年龄age性别gender性别gender工资salary成绩score所属院系department年级grade。
根据继承的设计思想,完全可以将教师和学生类的相同属性抽象出来,作为父类,然后为其子类添加差异的属性
-5-继承-3类的继承关系图-6-继承-4代码实现继承关系publicclassPerson{ privateStringname;//姓名
privateintage;//年龄
privateStringgender;//性别
……//省略get和set方法}classTeacherextendsPerson{ privatefloatsalary;//薪酬
privateStringdepartment;//部门
……//省略get和set方法}classStudentextendsPerson{ privateint[]score;//成绩
privateStringgrade;//年级
……//省略get和set方法}Java中只支持单继承,即一个类只能继承一个父类,而不能继承多个类。-7-继承-5演示在继承关系中构造方法的调用次序publicclassBase{ protectedinta; publicBase(){ a=20; System.out.println("InBaseconstructor!"); } publicstaticvoidmain(String[]args){ Sonobj=newSon(); obj.print(); }}classSonextendsBase{ intb; publicSon(){ b=100; System.out.println("InSonconstructor!"); } publicvoidprint(){ System.out.println("a:"+a+",b:"+b); }}执行结果如下:InBaseconstructor!InSonconstructor!a:20,b:100-8-多态-1重写 当一个子类继承了一个父类时,可以在子类中直接使用父类的属性和方法。如果父类的方法无法满足子类的需求,则可以在子类中对父类的方法进行改造,也称作重写(override)。重写是Java多态性的另一种体现。重写的原则重写的方法的签名必须要和被重写的方法的签名完全匹配;重写的方法的返回值必须和被重写的方法的返回一致或者是其子类;重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;私有方法不能被重写子类重写父类方法的过程中,可访问性只能一样或变的更公开。-9-多态-2演示在继承关系中重写publicclassBase{ publicvoidprint(){ System.out.println("InBase"); } publicstaticvoidmain(String[]args){ Sonobj=newSon(); obj.print(); }}classSonextendsBase{ //覆盖父类的print()方法
publicvoidprint(){ System.out.println("InSon"); }}执行结果如下:InSon-10-super、final用法super “super”关键字代表父类对象。通过使用super关键字,可以访问父类的属性或方法,也可以在子类构造方法中调用父类的构造方法,以便初始化从父类继承的属性。final
用来修饰类、方法和变量,其含义是“不可改变的、最终的”。修饰类:声明为final的类不能被继承,一个final类中的所有方法都隐式地指定为final。
修饰变量:声明为final的变量是一个常量,在定义时必须给予初始值,变量一旦初始化,将不能改变。修饰方法:声明为final的方法不能被子类重写。
-11-Object类-1Object类概述
Object类是所有类的顶级父类,在Java体系中,所有类都是直接或间接的继承了Object类。Object类包含了所有Java类的公共属性和方法,这些属性和方法在任何类中均可以直接使用,其中较为重要的方法如下表所示:方法名功能说明booleanequals(Objectobj)比较两个类变量所指向的是否为同一个对象,是则返回trueClassgetClass()获取当前对象所属类的信息,返回Class对象StringtoString()将调用toString()方法的对象转换成字符串Objectclone()生成当前对象的一个备份,并返回这个副本inthashCode()返回该对象的哈希代码值-12-Object类-2equals方法
定义一个类EqualsDemo来演示equals方法的使用。两个内建类型的数值进行比较是否相等时使用“==”,但当比较两个对象时可以使用“==”或equlas()方法publicclassEqualsDemo{ publicstaticvoidmain(String[]args){ Integerobj1=newInteger(5); Integerobj2=newInteger(15); Integerobj3=newInteger(5); Integerobj4=obj2; System.out.println("obj1.equals(obj1):"+obj1.equals(obj1)); //obj1和obj2是两个不同的对象
System.out.println("obj1.equals(obj2):"+obj1.equals(obj2)); //obj1和obj3引用指向同一个对象
System.out.println("obj1.equals(obj3):"+obj1.equals(obj3)); //obj2和obj4引用指向同一个对象
System.out.println("obj2.equals(obj4):"+obj2.equals(obj4)); System.out.println("-------"); System.out.println("obj1==obj1:"+(obj1==obj1)); //obj1和obj2是两个不同的对象
System.out.println("obj1==obj2:"+(obj1==obj2)); //obj1和obj3引用指向的对象的值一样,但对象空间不一样
System.out.println("obj1==obj3:"+(obj1==obj3)); //obj2和obj4引用指向同一个对象空间
System.out.println("obj2==obj4:"+(obj2==obj4)); }}执行结果如下:obj1.equals(obj1):trueobj1.equals(obj2):falseobj1.equals(obj3):trueobj2.equals(obj4):true-------obj1==obj1:trueobj1==obj2:falseobj1==obj3:falseobj2==obj4:true-13-Object类-3toString()方法
Object类中定义了publicStringtoString()方法,其返回值是String类型,描述当前对象的有关信息,在进行String与其他类型数据(引用类型)的连接操作时,将自动调用该对象类的toString()方法,默认情况下toString()方法返回的字符串格式是“类名@哈希码”,一般情况下需要重写toString()方法。
-14-Object类-4toString()方法实例
重新定义Person类,并重写其toString()方法。publicclassPerson{ //姓名
publicStringname; //年龄
privateintage; //性别
privateStringgender; //get或set等方法省略
publicStringtoString(){ returngetClass().getName()+"[name= "+name+",age="+age+",gender="+gender+"]"; } publicstaticvoidmain(String[]args){ Persontom=newPerson("tom",23,"male"); System.out.println(tom); }}执行结果如下:Person[name=tom,age=23,gender=male]-15-类的依赖关系依赖关系
在一个类的方法中操作另外一个类的对象,则称其依赖于第二个类。
人和车的依赖关系publicclassPerson{ voidtravel(Carcar){ car.run("北京"); } publicstaticvoidmain(String[]args){ newPerson().travel(newCar()); }}classCar{ voidrun(Stringcity){ System.out.println("汽车开到"+city); }}-16-类的关联关系关联关系 体现为一个类中使用另一个类的对象作为属性。
人、车的关联关系publicclassPerson{
Carcar; Person(Carcar){ this.car=car; } voidtravel(){ car.run("北京"); } publicstaticvoidmain(String[]args){ newPerson(newCar()).travel(); }}classCar{ voidrun(Stringcity){ System.out.println("汽车开到"+city); }}-17-类的聚合关系聚合关系
聚合关系体现的是整体与部分的关系,即一个类(整体)由其它类类型的属性(部分)构成。聚合关系中的各个部分可以具有独立的生命周期,部分可以属于多个整体。部门和员工是整体与部分的聚合关系publicclassDepartment{
Employee[]employees; publicstaticvoidmain(String[]args){ Employeee1=newEmployee(); Employeee2=newEmployee(); Employeee3=newEmployee(); Departmentdept1=newDepartment(); dept1.employees=newEmployee[]{e1,e3}; Departmentdept2=n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村振兴战略下职业技能培训对乡村经济结构调整的影响报告
- 808激光脱毛培训课件
- 中国卫生监督培训课件
- 员工安全操作课件
- 系文宣部培训大会
- 中国传统节日课件背景
- 幼师教育案例分享
- 浙大中控培训
- 制作商务培训
- 企业法治教育培训
- 图解“双均线双交叉”期货、股票操作系统课件
- 小学语文扩句、缩句专题
- 农村公路安全生命防护工程施工方案
- (部编版)统编版小学语文教材目录(一至六年级上册下册齐全)
- 抗滑桩专项的施工组织方案[专家评审]
- 常用弹簧钢号对照表
- 应用回归分析(第三版)何晓群_刘文卿_课后习题答案_完整版
- 小学二年级下册劳动教案
- 食品安全及卫生保证措施
- 60m3卧式液化石油气储罐设计
- 树脂的污染及处理
评论
0/150
提交评论