第4章面向对象下补充案例_第1页
第4章面向对象下补充案例_第2页
第4章面向对象下补充案例_第3页
第4章面向对象下补充案例_第4页
第4章面向对象下补充案例_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四充案案例4- 类的继2、练习目3、需求分4、设计思路(实现原理Student抽取两个类共同的内容(如:吃饭、睡觉)封装到一个类中,各自特有的部分保留让学生类继承类,老师类也继承编写测试类Example01,测试Student类和Teacher是否继承了类的成员二、案{Stringvoideat()System.out.println("}voidsleep(){}}classStudent 1int}classTeacherintvoidteach(){}}publicclasspublicpublicclasspublicstaticvoidmain(String[]args){Students=newStudent(); Teachert=newTeacher();}}4-1图4- 运行结1、在Jaa父类。234、继承的好处是划分了类的层次性,实现了代码重用、扩展了程序功案例4- 方法的重2练习目3需求分修改,即对父类的方法进行重写。为了让初学者掌握方法的重写,本案例将编写一个类Newhone,hone类并对honeca()4、设计思路(实现原理定义一个类Phone,编写方法call(),表示 功定义一个Phone的子类NewPhone,重写父类call()方法,让它除了打 编写一个测试类Example02,分别调用重写前和重写后的call()二、案classPhone{voidcall(){System.out.println(" }}classclassPhone{voidcall(){System.out.println(" }}classNewPhoneextendsPhone{voidcall(){System.out.println("开启语音}}2、定义测试类Example02publicpublicclasspublicstaticvoidmain(String[]args)Phonephone=newPhone();PhonenewPhonenewNewPhone();}}4-2图4- 运行结123、子类方法的修饰权限不能小于父类的4案例4- super父类成员变名称:super2练习目掌握使用super关键字父类成员变3需求分父类的该成员变量super.成员变量来实现。为了super关键字的用法,本案例将分别设计Fu类及其子类Zi,并在Zi类的方法中使用super关键字Fu类的成员变量。4、设计思路(实现原理编写一个Fu类,在类中定义无参构造和一个初始值为20的numZiFunum值进行了修改,同时在子类中定义无参构造和一个无返回值method()方法,method()superFunum成员变量。定义测试类Example03二、案classFuFu()intnum=}classclassFuFu()intnum=}classZiextendsFu{Zi(){}intnum30;//修改num的voidmethod(){super关键字调用父类成员变System.out.println("Fu类中num值为:super.num);System.out.println("Zi类中num值为:"+num);}}2、定义测试类Example03classclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}4-3图4- 运行结1、使用super2、被调用的父类成员变量,必须是非private案例4- super父类成员方名称:super2练习目掌握使用super关键字父类成员方3需求分子重父的法子对将法父被写方法为解这问在Jaa中专提了个super关字于类的为让学熟悉super关字用本例将别计u及子类i在i的法使用super键字u的员法。4、设计思路(实现原理编写一个Fu类,在类中定义无参构造和一个无返回值的show()Zi类继承Fu类,子类中定义无参构造和一个无返回值的method()方法,method()方法中使用superFushow()方法。定义测试类Example04二、案classFuFu()voidshow(){System.out.println("Fushow");}}classZiextendsclassFuFu()voidshow(){System.out.println("Fushow");}}classZiextendsFu{Zi(){}voidmethod(){System.out.println("Zimethod");super关键字调用父类成员方}}2、定义测试类Example04classclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}}4-4图4- 运行结2、被调用的父类成员方法,必须是非private案例4- super父类构造方名称:super2练习目掌握如何在子类构造方法中使用super关键字父类构造方3需求分可以使用supersupru类及其类i在i的造法使用super键字u的造法。4、设计思路(实现原理编写一个FuZiFusuperFu类的构定义测试类Example05二、案classFuFu()System.out.println("Fu类构造方法}}classFuFu()System.out.println("Fu类构造方法}}classclassZiextendsFu{Zi(){super();//System.out.println("Zi类构造方法}}publicclasspublicpublicclasspublicstaticvoidmain(String[]args){Zizi=newZi();}}4-5图4- 运行结1、通过super2super3、被调用的父类构造方法,必须是非private案例4- final修饰名称:final2练习目了解final掌握final3需求分Jaa中的类被fnal熟悉fnalfnaluuifnal4、设计思路(实现原理final关键字修饰的FuZi类,ZiFu定义测试类Example06二、案finalclassFu}finalclassFu}classZiextendsFu}2、定义测试类Example06publicpublicclasspublicstaticvoidmain(String[]args){Zizi=newZi();}}4-6图4- 运行结在Java中,被final案例4- final修饰方名称:final2练习目掌握使用final3需求分fnalfnalufnal修饰的show()ui类,在i类中对show()4、设计思路(实现原理Fufinalshow()Zi类,ZiFuZishow()方法进行重写3)Example07ZiZishow()方法。二、案classFupublicfinalvoidshow(){ classFupublicfinalvoidshow(){ }}classZiextendsFupublicvoidshow() ,给处理了}}2、定义测试类Example07publicpublicclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}4-7图4- 运行结当一个类的方法被final案例4- final修饰局部变名称:final2练习目掌握使用final3需求分Java中被final修饰的变量为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。为了让初学者掌握使用final关键字修饰局部变量,本案例将在类的方法中定义一个final修饰的局部变量,并试着对该变量重新赋值。4、设计思路(实现原理编写一个Example08类,类中定义类一个final修饰的局部变量age,为其赋初始值为18age20二、案publicclasspublicpublicclasspublicstaticvoidmain(String[]args){finalintage=18;//第一次可以赋值age=20; //再次赋值会报错}}4-8图4- 错误提final案例4- final修饰成员变名称:final2练习目掌握使用final3需求分Java中,final修饰的变量表示常量,一经定义就不能重新赋值。为了让初学final修饰final关键字修饰成员变量,观察其是否能够再次赋值。4、设计思路(实现原理编写一个Fu类,父类中定义一个变量X,并用finalZi类,ZiFu定义测试类Example09二、案classFupublicfinalintXclassFupublicfinalintX=}classZiextendsFuX20;//在子类中对常量再赋新值publicvoidmethod(){}}2、定义测试类Example09publicpublicclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}编译错误,结果如图4-9图4- 错误提iXJaa中被fnalfnal程会编译错。案例4- 接口的实2练习目3需求分mpemensmpemensIner4、设计思路(实现原理1)设计名为Inter的接口,接口中定义一个初始值为20的num常量和method()抽象方法。2)InterInterImplimplements关键字实现接口中的方法。3)编写测试类Example10二、案interfaceInterintnum=20;voidmethod();}interfaceInterintnum=20;voidmethod();}classInterImplimplementsIntervoidshow()}publicvoidmethod(){System.out.println("InterImplmethod");}}classpublicstaticclasspublicstaticvoidmain(String[]args)InterImplii=newInterImpl();}}4-10图4- 运行结1、接口使用interface2、接口没有构造方法,接口中的变量缺省都是使用publicstaticfinal修饰的,即全局常量,接口中的方法都是public 3、定义一个类,并使用implements4、由于接口中的方法都是抽象方法,因此不能直接通过实例化对象的方式来调用接口中的方法,需案例4- 接口的继2练习目3需求分eends,案将示口接、与口继承系。4、设计思路(实现原理设计接口Phone代表传统,在接口中定义receiveMessages()和call()抽象方法设计接口SmartPhone代表智能,在接口中定义faceTime()方法,并使用extends关键字继PhonePhone接口的所有功能。设计类M表示小米类中定义useMIUI()方法并实现SmartPhone接口的所有方法编写测试类Example11,测试类中对M进行实例化,并小米具有的各种功能二、案11PhoneSmartPhoneinterfacePhonevoidreceiveMessages();voidcall();}interfaceSmartPhoneextendsPhone{voidfaceTime();}classM implementsSmartPhone{publicvoidreceiveMessages(){}publicvoidcall(){}publicvoidfaceTime(){ }publicvoiduseMIUI(){}}2、定义测试类Example11publicpublicclassExample11publicstaticvoidmain(String[]args)Mm=new}}4-11图4- 运行结接口与接口之间的继承关系,可以是单继承,也可以是多继承;一个接口可以通过eends关键字继案例4- ObjectObject2练习目Object掌握Object3需求分在JDKObectObect类自身的equas()==的地址值,这时候常常就需要根据自身需求来重写equas()方法。为了方便初学者学习Obect类,本equas()方法。4、设计思路(实现原理设计Student类,定义sid变量表示学号,重写equals()方法,判断进行比较的两个学生对象学编写测试类Example12,创建两个Student的对象Lily和Lucy,并分别调用setter方法为学号赋值,最后通过打印语句,输出这两个对象通过“==equals()方法比较后的结果。二、案classStudent{Student(){}privateintclassStudent{Student(){}privateintpublicvoidsetSid(intsid){this.sid=sid;}}publicintgetSid(){returnsid;}我们的需求是学号相同的人就是同一个人.publicbooleanequals(Objectobj){if(this==obj){returntrue;}if(!(objinstanceofStudent)){returnfalse;}Students=(Student)obj;return(this.sid==s.sid);}}2、定义测试类Example12,为学号赋值,并打印使用“==”和重写equals()方法的比较结果publicclasspublicclassExample12publicstaticvoidmain(String[]args){StudentLily=newStudent();StudentLucy=newStudent();System.out.println("Lily==Lucy"+"\t\t"+(Lily==Lucy));}}4-12图4- 运行结1、Object类是Javapublicbooleanequals(Objectobj)2、Object类中的publicbooleanequals(Objectobj)returnreturn(this==}实际开发中很少比较内存地址值,所以我们常常会根据自身需求重写equals()案例4- 多态的作2练习目3需求分在Jaa中了现态允使一父类的量来一子类型对象根被子对特的得不的行果多提代了扩性可性为帮初者4、设计思路(实现原理编写Animal接口,接口中定义sleep()Cat类实现Animal接口的方法,并定义另一个方法 编写测试类Example13,使Cat对象指向父类Animal ,并通过该调用sleep()方法二、案2、定义测试类Example13,Cat2、定义测试类Example13,Cat对象指向,并使用父类调用sleep()方法interfaceAnimal{voidsleep();}classCatimplementsAnimal{voidcat ouse(){}publicvoidsleep(){}}publicpublicclassExample13publicstaticvoidmain(String[]args)AnimalAnimalanimal=newCat();}}4-13图4- 运行结1Jaa中,允许使用一个父类类型的变量来2要有父类指向子类对象3、多态的好处是提高代码的扩展性和可性4、多态的弊端是父类或者接口只能调用自己具备的成员,不能子类特有的成员案例4- 对象的类型转2练习目3需求分编写一个接口Animal,接口中定义sleep()方法,编写两个类Cat和Pig分别实现接口,再编写一Example14实现对象的类型转换。4、设计思路(实现原理1)Animalsleep()方法。2)CatPigAnimal接口的方法3编写测试类Example14对对象的类型进行转换使Cat向上为Animal类型然后再让Pig二、案interfaceAnimal{voidsleep();}classCatinterfaceAnimal{voidsleep();}classCatimplementsAnimal{publicvoidsleep(){}}classPigimplementsAnimal{publicvoidsleep(){}}2、定义测试类Example14,Cat对象指向Animal,并使用父类Animal调用sleep()方法。代publicclassExample14publicclassExample14publicstaticvoidmain(String[]args){Animalanimal=newCat();Pigpig=(Pig)animal;}}图4- 错误提1、向下类型转换时,需要注意被转换对象的真实类型是否和需要转换的对象类型相同,否则容易报(aa.an.CassasExcepon)。 变量)instanceof类(或接口2、Java提供了一个关键instanceof,它可以判断一个对象是 变量)instanceof类(或接口3、进行向上类型转换,子类对象当做父类类型使用时,不能通过父类变量去调用子类中某些方法,案例4- 内部名称:内部2练习目了解什么是内部掌握如何使用内部3需求分此还以用部来现口为让学能好理什是部类本例演如实一个部。4、设计思路(实现原理设计一个Inter接口,接口中定义show()和method()设计一个Outer类,在类的function()方法中使用内部类实现Inter接口并实例化,并调show()和method()最后编写一个测试类Example15,创建Outer的对象并调用function()二、案interfaceInter{voidshow();voidmethod();}classOutervoidfunction()interfaceInter{voidshow();voidmethod();}classOutervoidfunction()Interi=newInter(){publicvoidshow(){}publicvoidmethod(){}}}2、定义测试类Example15publicpublicclassExample15publicstaticvoidmain(String[]args){Outero=newOuter();}}4-15图4- 运行结new父类(参数列表new父类(参数列表 }2 内部类是实现接口的一种简便写法,在程序中不一定非要使 内部类3、什么时候使用内部类:通常在使用方法是接口类型参数,并该接口中的方法不超过三个时,以将内类为数递。4将一个类B定义在另一个类A的里面,那么B类就称为内部类(嵌套类)上内部类可以直接外部类中的成员,包括私有成员,而外部类要内部类中的成员必须要案例4- try...catch语try...catchfinally2练习目标掌握如何使用try...catch3需求分Jaa中提供了一种对异常进行处理的方式——异常捕获,异常捕获通常使用rycach语句。为rycachrach4、设计思路(实现原理Example16arrint类型一维数组,遍历数组输出每次遍历出的值,结束输出“over2)使用try...catch二、案publicpublicclassExample16publicstaticvoidmain(String[]args){int[]arr={1,2,3,4,5};tryfor(intx=0;x<=arr.length;x++){}}catch(ArrayIndexOutOfBound ceptione}}}4-16图4- 运行结1、try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。在2try...catchtrycatch。3、Throwable:是异常体系的超类.|--Error重大的错误,这个问题发生后,一般我们处理不了,一般不处理,程序进行修正。(内存溢出)|--Exception可以处理的问题,这个问题需要我们编写针对性的代码进行处理。(异常处理案例4- finally语try...catchfinally2练习目标finally3需求分在程序中,有时候我们希望有些语句无论程序是否发生异常都要执行,这时就可以在rycachfnayfnayfnay语句4、设计思路(实现原理Example17main方法中使用try…catch…finally…try10/0,catch语句块中会输出“出异常类”在finally二、案publicpublicclassExample17publicstaticvoidmain(String[]args){try{System.out.println(10/}catch(ArithmeticExceptione){}finally}}}4-17图4- 错误提无论是否发生异常,finally代码块是一定会执行的。但是需要注意的是,finally中的代码块在一种情finallySystem.exit(0)语句。案例4- throws关键throws2练习目throws3需求分Jaa中许方的面使用hrows关字外方法可发的常这调者调hrowshrows4、设计思路(实现原理在该类中定义方法div()用于进行除法运算,运算前对被除数进行判断,如果等于0,使用由于throw抛出了非运行时异常,为了保证编译通过,我们需要在方法名后面使用throws抛2)在main方法中调用div()方法,并通过try…catch…二、案publicpublicclassExample18publicstaticvoidmain(String[argstry{div(1,}catch(Exceptione){}catch(Exceptione){}}publicstaticintdiv(intx,inty)throwsExceptionif(y==0)throwsthrownew}returnx/}}4-18图4- 运行结修饰符返回值类型方法名([参数1,参数修饰符返回值类型方法名([参数1,参数2.....])throws }2、throws关键字需要写在方法的后面,throws后面需要方法中发生异常的类型,通常将这种做法称为方法抛出一个异常。案例4- 自定义异2练习目3需求分JaaExcepon4、设计思路(实现原理自定义名为MyException的异常类,继承自Exception在Example19在main()二、案classMyExceptionclassMyExceptionextendsException{privateintnumber;MyException(Stringmessage){}MyException(Stringmessage,intnumber){this.number=}publicintgetNumber(){returnnumber;}}2publicpublicclassExample19publicstaticvoidmain(String[]args){try{divide(20,}catch(MyExceptionmy)System.out.println("你给的除数是my.getNumber(而我们要求是+}}publicstaticintdivide(inta,intb)throwsMyException{if(b=0){thrownewMyException("除数不能为零}elsereturna/}}}4-19图4- 运行结1、在Java中允许用户自定义异常,但自定义的异常类必须继承自Exception2、throw关键字用于在方法中抛出异常的实例对象,其语法格式如下 throwException异常对 3、ain()方法中,定义了一个ry…cach语句用于捕获dide()方法抛出的异常。在调用dide()方法时由于传入的被除数不能为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论