JAVA程序员培训定制课程c06课件

PPT
  • 阅读 32 次
  • 下载 0 次
  • 页数 43 页
  • 大小 331.594 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
JAVA程序员培训定制课程c06课件
可在后台配置第一页与第二页中间广告代码
JAVA程序员培训定制课程c06课件
可在后台配置第二页与第三页中间广告代码
JAVA程序员培训定制课程c06课件
可在后台配置第三页与第四页中间广告代码
JAVA程序员培训定制课程c06课件
JAVA程序员培训定制课程c06课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 43
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】JAVA程序员培训定制课程c06课件.ppt,共(43)页,331.594 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45156.html

以下为本文档部分文字说明:

第六章Java类设计2本章内容Java类的继承方法的重载、重写多态性及其应用成员访问控制对象的创建和初始化细节几种常用的Java类3类的继承(1)为描述和处理个人信息,定义类Person:publiccl

assPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}Person+name:Str

ing+age:int+birthDate:Date+getInfo():String4类的继承(2)为描述和处理学生信息,定义类Student:publicclassStudent{publicStringname;publicintage;pu

blicDatebirthDate;publicStringschool;publicStringgetInfo(){...}}Student+name:String+age:int+birthDate:Date+school:String+getInfo(

):String5类的继承(3)通过继承,简化Student类的定义:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...

}}publicclassStudentextendsPerson{publicStringschool;}Person+name:String+age:int+birthDate:Date+getI

nfo():StringStudent+school:String6类的继承(4)类继承语法规则:<modifier>class<name>[extends<superclass>]{<declarations>*}Object类是

所有Java类的最高层父类Java只支持单继承,不允许多重继承–一个子类只能有一个父类–一个父类可以继承出多个子类7单继承举例(1)Person+name:String+age:int+birthDate:Date+getInfo():StringStudent+school:Strin

gSoldierOfficerGraduate+major:history+register():void8单继承举例(2)publicclassTestAnimals{publicstaticvoidmain(String[]args

){Horseb=newHorse();System.out.println(b.getI());}}classAnimal{privateinti=1;publicintgetI(){returni;}publicvoidsetI(in

ti){this.i=i;}}classHorseextendsAnimal{inti=2;}9访问控制ModiferSameClassSamePackageSubclassUniverseprivateYesdefaul

tYesYesprotectedYesYesYespublicYesYesYesYes可以对Java类中定义的属性和方法进行访问控制----规定不同的保护等级:10访问控制举例(1)classParent

{privateintf1=1;intf2=2;protectedintf3=3;publicintf4=4;privatevoidfm1(){System.out.println("infm1()f1="+f1);}voidfm2(){System.out

.println("infm2()f2="+f2);}protectedvoidfm3(){System.out.println("infm3()f3="+f3);}publicvoidfm4(){System.out.println("infm4()f4="+f4);}}11访问控制举

例(2)classChildextendsParent{privateintc1=21;publicintc2=22;privatevoidcm1(){System.out.println("incm1()c1="+c1);}publicvoidcm2()

{System.out.println("incm2()c2="+c2);}publicstaticvoidmain(Stringargs[]){inti;Parentp=newParent();i=p.f2;//i=p.f3;i=p.f4;p.fm2();//p.fm3

();p.fm4();Childc=newChild();i=c.f2;//i=c.f3;i=c.f4;i=c.c1;//i=c.c2;c.cm1();c.cm2();}}12访问控制分析f1_privatef2_defaultc2_publicf3_protectedf4_

publicc1_private内存空间中子类对象携带的数据子类的对象可以调用的方法fm2()_defaultfm3()_protectedfm4()_publiccm2()_publiccm1()_private父类Parent和子类Child在同一

包中定义时:13Ex改造上述应用程序后,分析其结果,体会Java访问控制机制,可分下述几种情形:应用程序入口main()方法定义在一个非子类中Parent和Child类位于不同包中Parent和Child类位于不同包中,m

ain()方法定义在不同包内的非子类中14方法的重写在子类中可以根据需要对从父类中继承来的方法进行改造----方法的重写重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型重写方法不能使用比被重写方法更严格的访问权限15方法重写举例(1)pub

licclassPerson{protectedStringname;protectedintage;protectedDatebirthDate;//java.util包中定义过类DatepublicStringgetInf

o(){return"Name:"+name+"\n"+"age:"+age;}}publicclassStudentextendsPerson{protectedStringschool;publicStringgetInfo(){return"N

ame:"+name+"\nage:"+age+"\nschool:"+school;}}16方法重写举例(2)publicclassParent{publicvoidmethod1(){}}publicclassChildextendsParent{privatevoidmethod1(

){}//illegal}publicclassUseBoth{publicvoiddoOtherThing(){Parentp1=newParent();Childp2=newChild();p1.method1();p2.method1();}}17关键字super在Java类

中使用super来引用父类的成分super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造方法中调用父类的构造方法super的追溯不仅于直接父类18关键字s

uper举例publicclassPerson{privateStringname;privateintage;privateDatebirthDate;publicStringgetInfo(){return"Name:"+name+"\nage:"+age;}

}publicclassStudentextendsPerson{privateStringschool="NewOriental";publicStringgetSchool(){returnschool;}publicStringgetInfo()

{//调用父类的方法returnsuper.getInfo()+"\nschool:"+school;}}19多态性(1)多态----在Java中,子类的对象可以替代父类的对象使用一个对象只能有一种确定的数据类型一个引用类型变量可能指向(引用)多种不同类型的对象Personp=newStu

dent();Objecto=newPerson();o=newStudent();20多态性(2)一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法Studentm=newStudent

();m.school="pku";//合法Persone=newStudent();e.school="pku";//非法21虚方法调用(VirtualMethodInvocation)正常的方法调用Persone=newPerson();e.getInfo(

);Studente=newStudent();e.getInfo();虚拟方法调用(多态情况下)Persone=newStudent();e.getInfo();编译时类型和运行时类型22多态性应用举例(1)同类收集(homogenouscollections)MyDate[]m=n

ewMyDate[2];m[0]=newMyDate(22,12,1964);m[1]=newMyDate(22,7,1964);异类收集(heterogeneouscollections)Person[]p=newPerson[3];p[0]=newStude

nt();p[1]=newPerson();p[2]=newGraduate();23多态性应用举例(2)方法声明的参数类型为父类类型,可以使用子类的对象作为实参调用该方法publicclassTest{publicvoidmethod(

Persone){//……e.getInfo();}publicstaticvoidmain(Stirngargs[]){Testt=newTest();Studentm=newStudent();t

.method(m);}}24instanceof操作符publicclassPersonextendsObject{…}publicclassStudentextendsPerson{…}publicclass

GraduateextendsPerson{…}----------------------------------------------------------------------publicvoidmethod1(Persone){if(einstanceofStuden

t){//处理Student类型及其子类类型对象}elseif(einstanceofGraduate){//处理Graduate类型及其子类类型对象}else{//处理Person类型对象}}25对象造型(Ca

sting)对Java对象的强制类型转换称为造型在造型前可以使用instanceof操作符测试一个对象的类型从子类到父类的类型转换可以自动进行从父类到子类的类型转换必须通过造型(强制类型转换)实现无继承关系的引用类型间的

转换是非法的26对象造型举例publicclassTest{//Person及Student类的定义见第17页publicvoidmethod(Persone){System.out.pritnln(e.getschool());//非法

if(eintstanceofStudent){Studentme=(Student)e;System.out.pritnln(me.getschool());}}publicstaticvoidmain(Stirngargs[]

){Testt=newTest();Studentm=newStudent();t.method(m);}}27方法名重载在同一个类中可以定义多个同名方法----方法名重载publicclassPrintStream{publicvoid

println(inti){……}publicvoidprintln(floatf){……}publicvoidprintln(Strings){……}}重载方法的参数列表必须不同重载方法的返回值类型可以相同,也可以不同28构造方法重载

构造方法重载举例:publicclassPerson{publicPerson(Stringname,intage,Dated){…}publicPerson(Stringname,intage){…}publicPerson(Stringname,Dated){…

}}构造方法重载,参数列表必须不同可以在构造方法的第一行使用this关键字调用其它(重载的)构造方法29构造方法重载举例publicclassPerson{privateStringname;priva

teintage;privateDatebirthDate;publicPerson(Stringname,intage,Dated){this.name=name;this.age=age;this.b

irthDate=d;}publicPerson(Stringname,intage){this(name,age,null);}publicPerson(Stringname,Dated){this(name,30,d);}publicPer

son(Stringname){this(name,30);}}30构造方法不能继承子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法在一个Java类中可以通过两种方式获得构造方法使用系统默认的无参构造方法显式定义一个或多个

构造方法一旦显式定义了构造方法,则系统不再提供默认构造方法31调用父类构造方法在子类的构造方法中可使用super(argument_list)语句调用父类的构造方法如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参

数的构造方法如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错32调用父类构造方法举例(1)1publicclassPerson{23privateStringname;4privateintage;5privateDate

birthDate;67publicPerson(Stringname,intage,Dated){8this.name=name;9this.age=age;10this.birthDate=d;11}12public

Person(Stringname,intage){13this(name,age,null);14}15publicPerson(Stringname,Dated){16this(name,30,d);17}

18publicPerson(Stringname){19this(name,30);20}21//……22}33调用父类构造方法举例(2)1publicclassStudentextendsPerson{2privateStringsch

ool;34publicStudent(Stringname,intage,Strings){5super(name,age);6school=s;7}8publicStudent(Stringname,Strings){9s

uper(name);10school=s;11}12publicStudent(Strings){//编译出错:nosuper()13school=s;14}15}34对象构造和初始化细节分配存储空间并进行默认的初始化按下述步骤初始化实例变量1.绑定构造方法参数2.如有this()调用,则

调用相应的重载构造方法,然后跳转到步骤53.显式或隐式追溯调用父类的构造方法(Object类除外)4.进行实例变量的显式初始化操作5.执行当前构造方法的方法体35构造和初始化对象举例publicclassObject{publicObject(){…}...}publicclas

sPersonextendsObject{privateStringname;privateintage=0;privateDatebirthDate;publicPerson(Stringn,Dated){//implicitsuper();name=n;birth

Date=d;}publicPerson(Stringn){this(n,null);}}publicclassStudentextendsPerson{privateStringschool;publicStud

ent(Stringn,Stringd){super(n);school=d;}}36Ex2初始化过程引申publicclassPerson{privateStringname;privateintage=0;p

rivateDatebirthDate;privateStringinfo;publicPerson(Stringn,Dated){//step3name=n;birthDate=d;info=getInfo();}publicPerson(Stringn){thi

s(n,null);}//step2publicStringgetInfo(){return"Name:"+name+"\nage:"+age+"\nBirthDate:"+birthDate;}}publicclas

sStudentextendsPerson{privateStringschool;publicStudent(Stringn,Stringd){//step0super(n);//step1school

=d;//step4}publicStringgetInfo(){returnsuper.getInfo()+"\nSchool:"+school;}}37Object类Object类是所有Java类的根父

类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类publicclassPerson{...}等价于:publicclassPersonextendsObject{...}38==操作符与equals方法=

=操作符与equals方法的区别:引用类型比较引用;基本类型比较值;equals()方法只能比较引用类型,"=="可以比较引用类型及基本类型;特例:当用equals()方法进行比较时,对类File、Strin

g、Date及封装类(WrapperClass)来说,是比较类型及内容而不考虑引用的是否是同一个实例;用"=="进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;39==操作符与equals方法举例classTestE

quals{//请自行定义能满足需要的MyDate类publicstaticvoidmain(String[]args){MyDatem1=newMyDate(24,3,2001);MyDatem2=newMyD

ate(24,3,2001);if(m1==m2){System.out.println("m1==m2");}else{System.out.println("m1!=m2");}if(m1.equals(m2)){System.

out.println("m1isequaltom2");}else{System.out.println("m1isnotequaltom2");}Integern1=newInteger(2);Integern2=newInteger(2);if(n1.e

quals(n2)){System.out.println("n1equalsn2");}else{System.out.println("n1notequalsn2");}}}40toString方法toString(

)方法在Object类中定义,其返回值是String类型,描述当前对象的有关信息在进行String与其它类型数据的连接操作时,自动调用toString()方法可以根据需要在用户自定义类型中重写toString()方法基本类型数据转换为String类型

时,调用了对应封装类的toString()方法41封装类针对八种基本定义相应的引用类型—封装类基本数据类型封装类booleanBooleanbyteByteshortShortintIntegerlongLongcharCharacterflo

atFloatdoubleDouble42封装类用法举例inti=500;Integert=newInteger(i);intj=t.intValue();//j=500Strings=t.toString();//s

="500"Strings1=Integer.toString(314);//s1="314"43Ex31.练习M3-38页==操作符与equals方法用法例子;其中用到的数据类型MyDate的定义见m6\TestEquals

\MyDate.java2.将1中的数据类型MyDate改为String或封装类型;体会其区别;参见m6\TestEquals_String\TestEquals_String.java

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?