




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏大学计算机学院Version2.0,第5章类设计,Page2,本章内容,定义继承、多态、重载、覆盖和虚拟方法调用使用访问修饰符protected和缺省(友元包)描述构造器和方法重载的概念描述完整对象结构和初始化操作了解转型对象的使用描述重载方法和具有变量参数的方法描述重载构造器和调用父类构造器了解Wrapper类了解原始类型的自动包装,Page3,子类化,在编程时,通常要创建某个对象的模型,然后需要在此模型基础上设计更专门化的模型。例如,要为经理建立一个模型,经理是名雇员,但是又具有区别于一般雇员的其他特性这个例子说明了Manager类和Empolyee类之间的数据复制。此外有很多方法对Manager和Empolyee都适用。因此,需要从已有的类创建一个新类的方法;这种方法称为子类化。,Page4,继承,继承指从父类获取一组属性和相关的行为。利用继承,可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类继承的好处:减少代码中的冗余代码容易维护扩展现有类的功能,publicclassEmployeeStringname=“”;doublesalary;DatebirthDate;publicStringgetDetails().publicclassEmployeeextendsEmployeeStringdepartment;,Page5,继承(续),单重继承子类来源于一个超类。单重继承的示例如下所示:,Page6,继承(续),Java不支持多重继承。接口提供了多重继承的好处而没有缺点。Java类实现继承的语法如下所示:classextendssuperclass*,Page7,子类,在Java中通过使用关键字extends来声明一个子类publicclass子类名extends父类名.例如:publicclassManagerextendsEmployee.如果一个类没有声明中没有使用extends关键字,这个类被系统默认是Object的直接子类,Object是java.lang包中的类通过继承,子类自动拥有了父类(superclass)的所有成员(成员变量和方法)。,Page8,子类的继承性,类有可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明定义的,另一部分是从它的父类继承的。所谓子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法操作.所谓子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法调用。,Page9,子类和父类在同一包中的继承性,如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员或方法的访问权限保持不变。classParentprivateintn_private=1;intn_friendly=2;protectedintn_protected=3;publicintn_public=4;classChildextendsParentpublicvoidf()/n_private=10;n_friendly=20;n_protected=30;n_public=40;,Page10,子类和父类不在同一包中的继承性,如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。,Page11,类创建了一个对象之后,该对象可以通过“.”运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的方法是有一定限制的。所谓访问权限是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法。访问限制修饰符有private、protected、default和public,都是Java的关键字,用来修饰成员变量或方法。,访问控制(AccessControl),Page12,访问控制(AccessControl),Java权限修饰符publicprotectedprivate置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。对于class的权限修饰只可以用public和default。(innerclass除外)public类可以在任意地方被访问default类只可以被同一个包内部的类访问,TestAccess.java编写程序验证Java中的访问控制。,Page13,覆盖方法,子类根据需要可修改从父类继承的方法。子类可创建具有与父方法的不同功能的方法,但是具有以下相同的项:名称返回类型参数列表覆盖方法不能使用比被覆盖方法更严格的访问权限。,Page14,覆盖方法,classPersonprivateStringname;privateintage;publicvoidsetName(Stringname)=name;publicvoidsetAge(intage)this.age=age;publicStringgetName()returnname;publicintgetAge()returnage;publicStringgetInfo()returnName:+name+n+age:+age;classStudentextendsPersonprivateStringschool;publicStringgetSchool()returnschool;publicvoidsetSchool(Stringschool)this.school=school;publicStringgetInfo()returnName:+getName()+nage:+getAge()+nschool:+school;,覆盖方法的规则覆盖方法的参数顺序和名称应该与超类方法的相同。被覆盖和覆盖方法的返回类型应该是相同的。覆盖方法的可访问性不能少于它所覆盖的方法。例如,如果覆盖方法在超类中声明为公共,您不能用子类中的私有关键字来覆盖它。,Page15,覆盖方法(续),子类方法通过使用super关键字可调用超类的方法:关键字super在类中使用来引用其超类。关键字super用来引用超类的成员,包括数据属性和方法。调用的行为不必一定在超类中;它可以是层次结构中的上一层。使用super关键字调用覆盖方法:publicclassEmployeeprivateStringname;privatedoublesalary;privateDatebirthDate;publicStringgetDetails()returnName:+name+nSalary:“+salary;,Page16,覆盖方法(续),publicclassManagerextendsEmployeeprivateStringdepartment;publicStringgetDetails()/callparentmethodreturnsuper.getDetails()+“nDepartment:+department;,Page17,多态,多态是具有许多不同形态的功能;例如,Manager类具有对Employee类的方法的访问权。对象只有一种形态(在构造时给定的那一种)。引用变量可引用不同形态的对象。Java编程语言允许您引用具有父类的类型的变量的对象:例如:Employeee=newManager();/legale.department=“Sales”;/illegal,Page18,虚拟方法调用,获得的是运行时与变量引用相关对象的行为,该行为不是由编译时的变量类型决定的,这一行为通常称为虚拟方法的调用。虚拟方法调用如下所示执行:Employeee=newManager();e.getDetails();编译时类型和运行时类型调用具有以下特征:方法名必须是声明的变量类型的成员;在此例中Employee具有名称为getDetails的方法。使用的方法实现基于运行时对象的类型;在此例中Manager类具有getDetails方法的实现。,Page19,异类集合,异类集合:具有相同类的类型的对象集合称之为同类集合。例如:MyDatedates=newMyDate2;dates0=newMyDate(22,12,1964);dates1=newMyDate(22,7,1964);具有不同类的类型的对象集合称之为异类集合。例如:Employeestaff=newEmployee1024;staff0=newManager();staff1=newEmployee();staff2=newEngineer();Object类:在java中所有的类都是Object类的子类,所以,一个异类集合可以包含所有的对象(基本数据类型除外).,Page20,instanceof运算符,假定对象可以通过引用传递给他们的父类,而且有时候不知道确切是声明对象,这真是instanceof运算符的目的。假定类的层次publicclassManagerextendsEmployeepublicclassEngineerextendsEmployee如果通过Employee类型的引用接受对象,结果将是Manager或者Engineer,可以用instanceof运算符进行测试publicvoiddoSomething(Employeee)if(einstanceofManager)/ProcessaManagerelseif(einstanceofEngineer)/ProcessaManagerelse/ProcessanyothertypeofEmployee,Page21,转型对象,转型对象用在其中已接收对父类的引用并想要访问子类对象的全部功能的情况:使用instanceof来测试对象的类型。通过转型复原对象的全部功能。使用以下指导原则检查适当的转型:一个基类的引用类型变量可以“指向”其子类的对象。一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting),Page22,转型对象,publicvoiddoSomething(Employeee)if(einstanceofManager)Managerm=(Manager)e;System.out.println(“Thisisthemanagerof”+m.getDepartment());此处如果不转型执行e.getDepartment()方法将失败,编译器无法在Employee类中找到getDepartment()方法,Page23,/运行如下程序publicclassTestpublicstaticvoidmain(Stringargs)Personp=newPerson(1,20);();(hello);,方法的重载,方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法,返回类型可以不同。调用时,会根据不同的参数表选择对应的方法。例如:在Person类中添加如下方法:,voidinfo()System.out.println(Myidis+id);voidinfo(Stringt)System.out.println(t+id+age);,TestOverload2.java,TestOverload1.java,Page24,使用变量参数的方法,重载的一个改变是要知道何时需要一个方法,而该方法带有相同类型的任意数量的参数publicclassStatisticspublicclassfloataverage(intx1,intx2)publicclassfloataverage(intx1,intx2,intx3)publicclassfloataverage(intx1,intx2,intx3,intx4)varargs或变量参数是由J2SE5.0提供的功能。它帮助将相同类型的参数的变量数量作为参数传递给方法。它可用于当具有许多共享相同功能的重载方法。,Page25,使用变量参数的方法(续),以下示例示范了varargs的使用:publicclassStatisticspublicfloataverage(int.nums)intsum=0;for(intx:nums)sum+=x;return(float)sum)/nums.length;可通过作为整数传递任意数量的参数来调用average方法。,nums是类型int的数组,Page26,构造方法的重载,与普通方法一样,构造方法也可以重载,参数列表必须不同例如:修改Person类的构造方法为:,Person()id=0;age=20;Person(inti)id=0;age=i;Person(intn,inti)id=n;age=i;,Page27,构造方法的重载(续),重载构造器的示例:publicclassEmployeeprivatestaticfinaldoubleBASE_SALARY=15000.00;privateStringname;privatedoublesalary;privateDatebirthDate;publicEmployee(Stringname,doublesalary,DateDoB)=name;this.salary=salary;this.birthDate=DoB;publicEmployee(Stringname,doublesalary)this(name,salary,null);publicEmployee(Stringname,DateDoB)this(name,BASE_SALARY,DoB);/moreEmployeecode.构造器中的this关键字必须在构造器代码中的第一行。,初始化所有实例变量,用作对第一个构造器的转发调用,在类常量BASE_SALARY中调用第一个构造器传递,Page28,构造器不被继承,子类从超类(父类)继承所有方法和变量。子类不从超类继承构造器。包括构造器的两种方式:使用默认构造器写一个或多个显式构造器,Page29,继承中的构造方法,子类的构造的过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。使用this(agumentlist)调用本类另外的构造方法如果调用super,必须写在子类构造方法的第一句如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。,TestSuperSub.java,Page30,调用父类构造器(续),调用父类构造器的示例:publicclassManagerextendsEmployeeprivateStringdepartment;publicManager(Stringname,doublesalary,Stringdept)super(name,salary);department=dept;publicManager(Stringname,Stringdept)super(name);department=dept;publicManager(Stringdept)/Thiscodefails:nosuper()department=dept;/moreManagercode.,Page31,Object类,Object类是Java中的所有类的根基类。没有extends子句的类声明暗含extendsObject。例如:publicclassEmployee.等同于:publicclassEmployeeextendsObject.object类的两个重要方法:equals()toString(),Page32,equals方法,Object类中定义有:publicbooleanequals(Objectobj)方法提供定义对象是否“相等”的逻辑。Object的equals方法定义为:x.equals(y)当x和y是同一个对象的应用时返回true否则返回falseJ2SDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回true否则返回false。可以根据需要在用户自定义类型中覆盖(重写)equals方法。,TestEQ/TestEquals.java,Page33,toString方法,toString()方法具有以下特征:Object类中定义有publicStringtoString()方法,其返回值是String类型,描述当前对象的有关信息。此方法将对象转换为String。在字符串拼接中使用此方法。在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person),将自动调用该对象类的toString()方法覆盖此方法来提供关于使用可读格式用户定义对象的信息。使用wrapper类的toString()静态方法将原始类型转换为字符串。,Page34,Wrapper类,Java编程语言提供wrapper类来操作作为对象的原始数据元素。包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作。以java.lang.Integer类为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧园艺课程改革在新农科背景下的实践
- 气道异物类知识竞赛题及答案
- 2025-2030年全球新能源产业政策对新能源产业市场拓展激励报告
- 上海策划咨询报价方案
- 日语考试模拟试题及答案
- DB65T 4382-2021 圆盘式果树修剪机 作业质量
- 段防洪应急预案(3篇)
- 书法专业面试题目及答案
- 最专业情商测试题及答案
- DB65T 4414-2021 机采棉水肥一体化化肥减量增效技术规程
- 钢模板安全知识培训课件
- 新学期三年级班主任工作计划(16篇)
- 2025广东汕尾市海丰县公安局招聘警务辅助人员50人备考题库及答案解析
- 消防政府专职队培训课件
- 6.1 包饺子(教案)北师大版数学三年级上册
- 现代学徒制企业试点工作评估报告
- 火电厂特种设备培训课件
- 档案管理基本知识培训课件
- 2025至2030年中国K12教育行业市场调研分析及投资战略咨询报告
- 2025年中学无线电知识竞赛题库
- 2025《心肺复苏机救治院内心搏骤停患者护理专家共识》解读
评论
0/150
提交评论