




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章面向对象高级特性,本章要点,类的继承继承的规则子类的构造方法方法的覆盖final关键字接口接口的规范引用数据类型的转换多态Java中的包包和访问权限修饰符类的封装和内部类,主要内容,类的继承,1,接口,2,Java中的包,3,类的封装和内部类,4,类的继承,类的继承在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承被继承的类称为父类(超类,基类),新的类称为子类(派生类)。子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。,使用继承,假如你在为某个公司做一个企业管理软件,来管理企业的雇员,比如:工人(Worker)有姓名、出生日期和薪酬属性,需要获得名字、年龄、薪酬和服装津贴;主任(Officer)同样包含姓名、出生日期和薪酬属性,另外还有一个department(他所管理的部门),同样他也有获得姓名、年龄和薪酬的方法,还有一个获得交通补助的方法。你怎么做?,继承是利用现有的类创建新类的过程,现有的类称作基类(或父类),创建的新类称作派生类(子类)。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承,类的继承,继承的语法示例Employee.javaWorker.java,修饰符class子类名extends父类名,类的继承,继承的语法练习Officer.javaTestOfficer.java用java中类的继承机制,实现Officer类,并设计一个测试程序TestOfficer类,来访问Officer类继承的好处实现类的重用易维护,类的继承,继承的规则Java中只支持单继承,也就是说每个类只能有一个父类,不允许有多重继承一个父类可以有多个子类子类继承父类所有的属性和方法,但不继承父类的构造方法示例TestWorker.java,类的继承,子类的构造方法子类不能继承父类的构造方法使用默认的构造方法在子类中的创建构造方法示例Worker.java在子类中创建构造方法时,必须调用父类的构造方法子类可以在自己的构造方法中使用super关键字来调用父类的构造方法如果使用super关键字调用父类构造方法,必须写在该子类构造方法的第一行如调用的是父类中无参的构造方法,则可以不写super()如果子类中调用了父类无参的构造方法,而父类中没有无参构造方法则系统编译出错,super(参数1,参数2,);,案例,classPoint/定义点类/x轴坐标和y轴坐标,由于准备用于继承,故修饰为protectedprotectedfloatmX,mY;publicPoint(floatx,floaty)/构造方法mX=x;mY=y;classCircleextendsPoint/定义圆类继承于点类protectedfloatmRadius;/半径publicCircle(floatr)/构造方法mRadius=r;publicclassDemopublicstaticvoidmain(Stringargs)Circlec=newCircle(2.5f);/实例化圆类对象,本例将报出错误,构造方法的执行顺序,当实例化子类的对象时,必须先执行父类的构造方法,然后再执行子类的构造方法;如果父类还有更上级的父类,就会先调用最高父类的构造方法,再逐个依次地将所有继承关系的父类构造方法全部执行;如果父类的构造方法执行失败,那么子类的对象也将无法实例化。,super关键字调用父类的方法,publicclassSoftwareTeacherextendsTeacherpublicSoftwareTeacher(StringmyName,StringmyCenter)super(myName,myCenter);,子类的构造方法中,通过super关键字调用父类的构造方法,方法重写后,通过super关键字调用父类的普通方法,publicclassSoftwareTeacherextendsTeacherpublicvoidgiveLesson()System.out.println(使用电脑授课);super.giveLesson();,通过调用父类的构造方法,完成对属性值的初始化,通过调用父类的普通方法,完成部分功能,super总结,调用父类的构造函数super(parametersopt)调用父类的构造函数。必须是子类构造函数的第一条语句。如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。父类的构造函数在子类构造函数之前执行。调用父类的成员super.datasuper.method(parameters),类的继承,给定以下代码:下列描述哪些是正确的_?A.编译失败B.代码正常运行C.在第7行抛出异常D.在第2行抛出异常,答案:A,类的继承,练习Officer.java在Officer类中,创建一个构造方法,要求在调用该构造方法时,可以对name、birth、salary、department属性赋初值,类的继承,方法的覆盖(override)重写(rewrite)对从父类中继承来的方法进行改造在子类继承父类时发生示例TestOffice_1.java方法覆盖的规则在子类中的覆盖方法与父类中被覆盖的方法应具有相同的方法名相同的参数列表(参数数量、参数类型、参数顺序都要相同)相同的返回值类型子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限,类的继承,练习给定类,在其子类中下列哪些覆盖方法可以正确的声明_,classAintmethod1(inta,doubleb)return0;,A.intmethod1(inta,doubleb)return1;B.intmethod1(inta,longb)return1;C.intmethod1(intb,doublea)return1;D.shortmethod1(inta,doubleb)return1:E.intmethod1(doubleb,inta)return1;,答案:AC,类的继承,练习给定下列代码:当在第6行加入什么方法时会引起编译错误?,答案:B,方法覆盖注意,仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。,重写(覆盖)与重载,方法的重载:定义有相同名字,但参数不同的多个方法构成重载方法的重写:方法的重写必须和被重写的方法具有相同的名字,参数,返回值类型。构造方法也可以重载。,类的继承,final关键字final可以修饰的元素:类:不能被继承变量(属性和局部变量):不能被重新赋值在声明的同时赋值系统不会对final属性默认的赋初始值方法:不能在子类中被覆盖,即不能修改。,1.final修饰成员变量,final修饰变量,则成为常量,例如finaltypevariableName;修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。,2final修饰成员方法,final修饰方法,则该方法不能被子类重写。finalreturnTypemethodName(paramList),3final类,final修饰类,则类不能被继承。如果一个类被final关键字修饰,说明这个类不能再被其他类所继承,该类被称为最终类。finalclassfinalClassName在默认情况下,所有的成员变量或成员方法都可以被隐藏或重写,如果父类的成员不希望被子类的成员所隐藏或重写则将其声明为final。,classep4_12_astaticfinaldoublepi=3.1415926;/声明静态常量publicfinalvoidf()/声明最终方法System.out.println(pi=+pi);classep4_12_bextendsep4_12_aintnum=100;privatevoidf()/出错,不可覆盖父类的最终方法System.out.println(num=+num);classep4_12publicstaticvoidmain(Stringargs)ep4_12_bOne=newep4_12_b();One.f();,练习,练习Shape.javaRect.javaCircle.javaSquare.javaTestShape.java设计一个形状类:属性:周长和面积;方法:求周长和求面积形状类的子类:Rect(矩形),Circle(圆形)Rect类的子类:Square(正方形)不同的子类会有不同的构造方法及计算周长和面积的方法写一个测试类,在main方法中创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积,Contents,类的继承,1,接口,2,Java中的包,3,类的封装和内部类,4,接口(interface),抽象方法只有方法声明,没有方法实现的方法,访问权限修饰符abstract返回值类型抽象方法名(参数列表);,classAabstractintmethod1(inta,intb);,构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。,接口(interface),抽象类抽象类是抽象方法和非抽象方法的集合特殊情况全部是抽象方法全部为非抽象方法,访问权限修饰符abstractclass类名,abtractclassAStringname;abstractintmethod1(inta,intb);voidsayHi()System.out.println(“Hello!”);,接口(interface),抽象类注意:抽象类不能被实例化;其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;抽象方法不能为static;如果从一个抽象类继承,并想创建该新类的对象,那么我们就必须为基类中的所有抽象方法提供方法定义。在下列情况下,一个类必须声明为抽象类:当一个类的一个或多个方法是抽象方法时;当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;,抽象类的使用创建抽象类的对象,创建抽象类的对象扩展抽象类,实现其所有抽象方法创建该抽象类子类的对象,31,抽象类例子,publicclassCircleextendsShapepublicvoiddraw()System.out.println(drawacircle.);TestShape.javapublicstaticvoidmain(Stringargs)/Shapeshape=newShape();/error,shape是一个抽象类Shapeshape=newCircle();shape.draw();System.out.println(shape.getArea();,32,publicabstractclassShape/*画出自己*/publicabstractvoiddraw();/*得到面积*/publicdoublegetArea()return100.0;,可行吗?,补充:对象的转型,对象转型分为向上转型(upcasting)向下转型(downcasting).举例:Father是父类,Son类继承自Father。Fatherf1=newSon();/这就叫upcasting(向上转型)/现在f1引用指向一个Son对象Sons1=(Son)f1;/这就叫downcasting(向下转型)/现在f1还是指向Son对象,转型规则,父类的引用变量可以指向一个子类的对象,但不可以访问子类中新增加的成员(方法和变量);父类对象不能操作子类声明定义的成员变量;也不能使用子类声明定义的方法。父类对象可以调用子类重写的实例方法。父类对象可以调用子类继承的成员变量和隐藏的成员变量。可以将对象的父类对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有属性和功能如果子类重写了父类中的类方法,通过父类对象引用的是父类中的类方法,接口(interface),练习给定以下代码:执行下列哪些操作后,可以让代码通过编译?对methodA方法添加方法体将57行,用“;”代替删除class前的abstract关键字删除methodA方法前的abstract关键字删除methodB方法前的abstract关键字,答案:BE,接口(interface),练习Animal.javaFish.java按下面的类图,创建一个抽象类,该抽象类有字符串类型的eyecolor属性抽象方法stayIn,返回值类型为void方法showEye,返回值类型String,接口(interface),接口的声明接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法,而没有变量和方法的实现接口的成员:常量(字段)抽象方法,访问权限修饰符interface接口名接口的成员,接口(interface),接口的声明注意:接口不是一个类,没有构造方法,不能被实例化接口使用interface关键字来定义,而不是class接口默认:常量:publicstaticfinal抽象方法:publicabstract,interfaceRunnablepublicabstractvoidrun();,接口(interface),练习给定以下代码:下列选项中,哪些选项可以用来替代第2行代码?finalintk=4;Publicintk=4;Staticintk=4;Privateintk=4;Abstractintk=4;,答案:ABC,接口(interface),练习下列选项中,哪些可以定义在一个接口中?,答案:AB,接口(interface),练习VideoDevice.javaAudioDevice.java定义一个接口VideoDevice,表示可视设备,该接口中有:MIN_BRITGHTNESS常量,其值为10,表示最小亮度打开方法:turnOn()关闭方法:turnOff()定义一个接口AudioDevice,表示可视设备,该接口中有:MIN_VOLUME常量,其值为5,表示最小音量打开方法:turnOn()关闭方法:turnOff()调节音量方法:turnVolume(intvolume),接口(interface),interfaceAextendsB,interface,interface,interface,interfaceAextendsB,C,D,interface,扩展接口(接口的继承),示例VADevice.java,接口(interface),类实现接口implements为了使用一个接口,你要编写实现接口的类如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类多个无关的类可以实现一个接口,一个类可以实现多个无关的接口一个类可以在继承一个父类的同时,实现一个或多个接口示例Television.java,接口(interface),练习Runnable.javaBird.javaFlyable.java根据以下类图实现Runnable接口和Fylable接口设计一个类Bird,类Bird实现了以上两个接口,并设计一个main(),测试Bird类,得到以下测试结果,Thebirdisrunningwithitsfeet!Thebirdisflyingwithitswings!,接口(interface),类的单继承与多实现示例:Bird.java,接口(interface),类实现接口练习Student.javaConsumer.javaPerson.java创建一个Student类该类继承了Person类,并实现了Consumer接口该类具有String类型的属性school并有一个study方法,在该方法中,系统可打印出学生在那所学校学习并创建一个测试方法,测试Student类,接口(interface),接口的意义:接口可以实现多继承:用接口可以实现混合类型(主类型,副类型),java中可以通过接口分出主次类型主类型使用继承,副类型,使用接口实现接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能。,接口(interface),classCatextendsAnimalimplementsRunnable,练习Cat.javaTestCat.java编写代码实现以下类的关系其中,Cat有:属性:furcolor(毛的颜色)、name(名字)构造方法:一个有参的构造方法,可以满足在创建对象的同时,为其名字属性赋初值一个无参的构造方法方法:climbTree(),调用该方法将打印“Icouldclimbtree!”,接口(interface),引用数据类型的转换(对象造型)示例:TestStudent.java向上转型(Upcasting)子类转换为父类,自动转换;前提具有继承或实现关系向上转换损失了子类新扩展的属性和方法仅可以使用从父类中继承的属性和方法,接口(interface),引用数据类型的转换示例:TestStudent.java向下转型(Downcasting):强制转换将父类对象显示的转换成子类类型。,Animala=newCat();Catc=(Cat)a;,接口(interface),instanceof运算符判断一个类是否实现了某个接口判断一个实例对象是否属于一个类它的返回值是boolean型的示例TestStudent.java,对象instanceof接口,对象instanceof类,接口(interface),练习给定以下代码:执行后的结果是?A.打印字符串“Tested”B.编译失败C.代码运行成功但无输出D.运行时抛出异常,答案:B,接口(interface),多态(动态绑定、晚绑定Polymorphism)一个对象具有多种特征,根据不同的情况来做出不同的响应多态存在的三个必要条件要有继承,或实现要有重写父类引用指向子类对象一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法示例Teacher.javaStudent.javaPerson.javaSchoolManage.java,接口(interface),多态的优点简化代码改善代码的组织性和可读性易于扩展练习Parker.javaVehicle.javaBus.javaTruck.javaCar.java在停车场收费系统中,收费者会根据车型的不同收取不同的停车费,其中,客车:15元/小时货车:12元/小时轿车:8元/小时编写java程序完成此功能,练习,练习Cola公司的雇员分为以下若干类:ColaEmployee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(intmonth)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数,练习,练习SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率定义一个类Company,在该类中写一个函数,调用该函数可以打印出某月某个员工的工资数额,写一个main方法,把若干各种类型的员工放在一个ColaEmployee数组里,并单元出数组中每个员工当月的工资,Contents,类的继承,1,接口,2,Java中的包,3,类的封装和内部类,4,Java中的包,包的概念及应用在Java中,包主要有以下用途:包允许将类组合成较小的单元有助于避免命名冲突包允许在更广的范围内保护类、数据和方法包可以是类、接口和子包的集合,Java中的包,包的概念及应用将类放入包中注意:在java中位于包中的类,在文件系统中的存放位置,必须有与包名层次相对应的目录结构package语句作为java源文件的第一条语句每个源文件只能声明一个包如果没有package语句,则默认为无名包,package包名;,Java中的包,访问其它包中的类包名.路径名使用import关键字引入其它包中的类位于同一包中的类可以直接访问,packagetest;importp08.Animal;classCatextendsAnimal,packagetest;classCatextendsp08.Animal,Java中的包,访问其他包中的类导入包中所有的类导入子包中所有的类导入包中的某个类,import包名.*;,import包名.子包名.*;,import包名.子包名.类名;,Java中的包,JDK中常用的包java.langJava语言包(包含String、Math、System等类),任何类中,该包中的类都会被自动导入。java.util包含一些实用的工具类(包含list,calendar,date等类)java.awt图形用户界面包。java.io提供多种输入/输出功能的类。,Java中的包,把自己的类打包使用java命令行参数使用Ecliplse或MyEclipse中的Export工具,jar-cvfanimal.jar*.*,Java中的包,访问权限修饰符用来控制类的成员和类的使用范围类成员的访问权限修饰符:private、default、protected、public类的访问权限修饰符:public、default示例:Access.javaTestAccess.java,Java中的包,访问权限修饰符,接口(interface),练习给定以下代码:下列选项正确的是?A.编译失败B.成功编译并执行C.编译成功,但运行时在ClassTest.java的第5行抛出异常D.编译成功,但运行时在ClassTest.java的第6行抛出异常,答案:A,Contents,类的继承,1,接口,2,Java中的包,3,类的封装和内部类,4,类的封装和内部类,类的封装将类的成员变量声明为私有的(private),再提供一个或多个共有(public)方法实现对该成员变量的访问或修改,这种方式就被称为封装封装的目的隐藏类的实现细节让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作便于修改,增强代码的可维护性可进行数据检查示例Employo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中药药剂学试卷试题及答案
- 机务维修面试试题及答案
- 混合设备节能策略-洞察及研究
- 建行面试题库及答案
- 安全用火考试题及答案
- 安徽辅警笔试题及答案
- 农家乐土地租赁与乡村旅游资源整合合同
- 节能减排项目担保借款协议与合同
- 2025海南公务员面试题及答案
- 灯箱广告牌广告位租赁与广告策划合同
- 2025鄂尔多斯市城市建设投资集团招聘92人考试参考题库及答案解析
- 一氧化碳试卷及答案
- 2025年全国企业员工全面质量管理知识竞赛题库及答案(共132题) - 副本
- 光伏站电力监控系统介绍参考课件
- 公开课第一课素描基础入门课件
- 果蔬加工工艺学:果蔬汁
- 门机防腐施工方案
- 定向井井眼轨迹计算课件
- 石景山区语文一模试卷讲评分析
- 八年级上学期语文周周练
- 《青光眼手术新进展》ppt课件
评论
0/150
提交评论