




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第三章Java面向对象编程,2,本章重点,传统编程模式面向对象编程方法OOP的基本概念和特点Java中的OOP理解Java中的各种修饰符超类和子类构造函数和重载的构造函数,3,3.1传统编程模式,面向过程COBOLFORTRANC,4,3.2面向对象的编程方法,5,3.3面向对象编程的特点,更强调数据而不是过程程序被划分为若干个对象数据结构体现对象的特点函数和数据结构联系紧密数据是隐藏的,外部函数无法访问数据对象之间通过函数联系起来需要时可以很方便地添加新的数据和函数遵循自上而下的程序设计方法,6,3.4OOP的基本概念,类对象数据抽象数据封装继承多态,7,类类是某种类型的所有对象定义共同变量和方法的模板.注意类是用户定义的数据类型,它包括一个对象的所有数据和代码.,3.4OOP的基本概念,8,3.4OOP的基本概念,对象everythingisanobject现实世界的对象:桌子、书、自行车、电视、狗、文件、表格、按钮、窗口对象的组成数据操作数据的代码类和对象的关系类是对象的模板(template)/抽象一个对象是类的一个实例(instance),9,3.4OOP的基本概念,类是一个定义一个对象的属性和行为并且在设计的时候产生的模板或蓝图,一个对象是一个关于类的运行实例,它占用内存并且拥有一定的生命周期,123,245,12,245,10,3.4OOP的基本概念,数据抽象抽象是从大量的背景细节和详细解释中提取共同的实质性要素的过程.数据抽象过程抽象,11,3.4OOP的基本概念,数据封装对象本身的数据得到保护/隐藏其他对象仅仅需要知道对该对象的访问方法(接口/interface)即可封装的好处模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形状信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响,12,3.5在Java中创建类和对象,创建类类是用来创建对象的蓝图或原型.类的构建类的声明类的主体,13,3.5在Java中创建类和对象,类的声明类修饰符class类名extends父类名implements接口名常见的类修饰符public:Declaresthattheclasscanbeusedbyanyclassregardlessofitspackage(无任何限制)abstract:Declaresthattheclasscannotbeinstantiated(声明该类不能被实例化,抽象类,出现在继承关系中)final:Declaresthattheclasscannotbesubclassed(声明该类不能有子类)无修饰:aclasscanbeusedonlybyotherclassesinthesamepackage(仅仅能被同一个包中的其他类引用),14,3.5在Java中创建类和对象,类主体类主体包含两个部分:变量声明和方法classClassNameMembervariableDeclarations;MethodDeclarations;,15,3.5在Java中创建类和对象,成员变量声明修饰符类型变量名;修饰符类型变量名=初值;修饰符类型变量名=初值,变量名=初值;成员方法定义类成员修饰符方法返回类型方法名()throws异常名方法体;修饰符访问权限修饰符:public/protected/private类型修饰符:static/final/transient/volatile,16,public(公共变量/公共方法)容许全权访问,无任何限制(先构造对象,再访问),3.5在Java中创建类和对象,同一个包中classAA();publicintx;publicvoidprint();classBvoidtest()Aa=newA();a.x=100;a.print();,不在同一个包中packageabc;publicclassApublicA();publicintx;publicvoidprint();packagexyz;importabc.A;classBvoidtest()Aa=newA();a.x=100;a.print();,直接访问公有变量x和公共方法print(),17,private(私有变量/私有方法)仅能在其所定义的类中被访问(先构造对象,再访问),D:javacA.javaD:javacB.javaxhasprivateaccessinAa.x=100;print()hasprivateaccessinAa.print();2errors,3.5在Java中创建类和对象,同一个包中classAprivateintx;privatevoidprint();voidtest()print();classBvoidtest()Aa=newA();a.x=100;a.print();,18,protected(保护变量/保护方法)容许类本身、同一个包中所有类、以及子类访问(先构造对象,再访问),3.5在Java中创建类和对象,同一个包中classAprotectedintx;protectedvoidprint();classBvoidtest()Aa=newA();a.x=100;a.print();,不在同一个包中packageabc;publicclassApublicA();protectedintx;protectedvoidprint();packagexyz;importabc.A;classBextendsAvoidtest(Bb)b.x=100;b.print();,19,无修饰(友好变量/友好方法)容许类本身以及同一个包中所有类访问,3.5在Java中创建类和对象,同一个包中classAA();intx;voidprint();classBvoidtest()Aa=newA();a.x=100;a.print();,同一个包中packageabc;classAA();intx;voidprint();packageabc;classBvoidtest()Aa=newA();a.x=100;a.print();,20,访问权限修饰符小结,3.5在Java中创建类和对象,21,static(静态变量/静态方法)类的变量/方法,独立于类的对象,即不属于任何一个类的具体对象,而是所有对象共享。可以直接根据类名调用classSstaticintA=12,B=34;staticvoidprint();classTestpublicstaticvoidmain(Stringargs)System.out.println(“A=“+S.A+“B=“+S.B);S.print();,3.5在Java中创建类和对象,22,static(静态变量/静态方法),classTestpublicvoidprint(intx)System.out.println(x);publicstaticvoidmain(Stringargs)intx=3;print(x);,D:javacTest.javaTest.java:9:non-staticmethodprint(int)cannotbereferencedfromastaticcontextprint(x);1error,3.5在Java中创建类和对象,23,static(静态变量/静态方法),classTestTest();publicvoidprint(intx)System.out.println(x);publicstaticvoidmain(Stringargs)intx=3;Testt=newTest();t.print(x);,classTestpublicstaticvoidprint(intx)System.out.println(x);publicstaticvoidmain(Stringargs)intx=3;print(x);,static方法中仅仅可以调用其他static方法,3.5在Java中创建类和对象,24,final变量/方法final变量:定义一个常数,即变量值不能改变finaldoubleAVOGADRO=6.022e23;final类:不能有子类final方法:方法不能被重写(overriding),不能被子类重新定义,3.5在Java中创建类和对象,classAfinalvoidprint()System.out.println(“1”);classBextendsAvoidprint()System.out.println(“1”);,25,3.5在Java中创建类和对象,transient标识出不属于对象稳定状态组成部分的特定成员变量.volatile声明变量可被异步修改.,26,3.5在Java中创建类和对象,方法的重载方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。,27,3.5在Java中创建类和对象,方法的重载(overload)方法名相同,但方法的参数不同方法描述方法名(标识符)参数类型方法返回值绝对值abs(a)intint绝对值abs(a)longlong绝对值abs(a)floatfloat绝对值abs(a)doubledoublepublicstaticintabs(inta)publicstaticlongabs(longa)publicstaticfloatabs(floata)publicstaticdoubleabs(doublea),28,3.5在Java中创建类和对象,方法的重载,importjava.io.*;classMethodOverloadingvoidreceive(inti)System.out.println(Receiveoneintdata);System.out.println(i=+i);voidreceive(intx,inty)System.out.println(Receivetwointdatas);System.out.println(x=+x+y=+y);publicclassMethodOverloadingTestpublicstaticvoidmain(Stringargs)MethodOverloadingmo=newMethodOverloading();mo.receive(1);mo.receive(2,3);,29,3.6构造函数,构造函数是类的一种特殊方法,它的特殊性主要体现在如下的几个方面:构造函数的方法名与类名相同.构造函数没有返回类型.构造函数的主要作用是完成对类对象的初始化工作.构造函数不能由编程人员显式地直接调用.在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化.,30,3.6构造函数,构造函数的定义与使用,classCCircle/定义类CCircleprivatedoublepi=3.14;privatedoubleradius;publicCCircle(doubler)/定义构造函数CCircle()radius=r;publicvoidshow()System.out.println(radius=+radius+,area=+pi*radius*radius);publicclassconstructdemo1publicstaticvoidmain(Stringargs)CCirclecir1=newCCircle(4.0);/建立对象并调用CCircle()构造函数cir1.show();,31,3.6构造函数,classCCircle/定义类CCircleprivateStringcolor;privatedoublepi=3.14;privatedoubleradius;publicCCircle()/没有参数的构造函数System.out.println(constructorCCircle()called);radius=1.0;color=Green;publicCCircle(Stringstr,doubler)/有两个变量的构造函数System.out.println(constructorCCircle(String,double)called);color=str;radius=r;publicvoidshow()System.out.println(color=+color+,Radius=+radius);System.out.println(area=+pi*radius*radius);,publicclassconstructdemo2publicstaticvoidmain(Stringargs)CCirclecir1=newCCircle();cir1.show();CCirclecir2=newCCircle(Blue,4.0);cir2.show();,32,例:一个会做加法的机器人,classSmanpublicStringsex;publicSman(StringInitsex)sex=Initsex;publicvoidsum(intx,inty)intz=x+y;System.out.println(z);,classCpublicstaticvoidmain(Stringargs)Smanm1=newSman(man);m1.sum(4,5);,33,方法的重载,classSmanpublicStringsex;publicSman(StringInitsex)sex=Initsex;publicvoidsum(intx,inty)ints=x+y;System.out.println(z);publicvoidsum(intx,inty,intz)ints=x+y+z;System.out.println(s);,34,3.7垃圾回收,内存管理技术当对象不再使用时,Java运行时环境将删除对象,这个过程就是垃圾回收.System.gc()运行垃圾回收器finalize(),35,3.8finalize方法,回收之前释放的系统资源例protectedvoidfinalize()语句块,36,3.9继承,为什么会有继承?建立一个类后,发现另一个新的类有相类似的特性,两个选择:重新定义一个新的类;在已有类的基础上进行扩展(增加或赋予新的特性)超类和子类继承和发扬继承父类的方法和变量添加新的方法/变量以及方法的重写(overriding)树型结构(层次化结构)根(基类),37,3.9继承,客观实例,38,3.9继承,父类和子类子类继承(拥有)父类所有的数据和方法同时子类可以定义新的数据和方法“青出于蓝,而胜于蓝”,39,3.9继承,Object类全体类的父类处于类层次关系中最上层的类几个常用方法:protectedObjectclone()publicStringtoString()publicbooleanequale(Objectobj)publicfinalClassgetClass()Class类,40,3.9继承,继承的实现继承的实现主要有以下几个步骤:确定父类.定义子类.语法:类修饰符class子类名extends父类名实现子类的功能.,41,3.9继承,示例classApublicinta1;privatefloata2;intgetA()return(a1);voidsetA()classBextendsAintb1;Stringb2;StringgetB()return(b2);classCextendsBintc;intprintC()System.out.println(c);,类B所拥有的成员?,类C所拥有的成员?,a1,b1,b2,getA(),setA(),getB(),a1,b1,b2,c,getA(),setA(),getB(),pirntC(),42,3.9继承,构造函数的继承子类无条件地继承父类的不含参数的构造函数;如果子类自己没有构造函数,则它将继承父类的无参数构造函数作为自己的构造函数;如果子类自己定义了构造函数,则在创建新对象时,它将先执行继承父类的无参数构造函数,然后再执行自己的构造函数。对于父类的含参数构造函数,子类可以通过在自己构造函数中使用“super”关键字来调用它,但这个调用语句必须是子类构造函数的第一个可执行语句,43,3.9继承,publicclassApublicstaticvoidmain(Stringargs)Bb=newB(1);A()System.out.print(A);A(inti)this();System.out.print(AA);classBextendsAB()super();System.out.println(B);B(inti)super(i);System.out.println(BB);,A(i),AAA,44,第二代机器人Tman,publicclassTmanextendsSmanpublicintweight;publicTman(StringInitsex,intInitweight)super(Initsex);weight=Initweight;publicvoidmax(intx,inty)if(xy)System.out.println(x);elseSystem.out.println(y);,this.weight=Initweight;,45,3.9继承,不支持多重继承,一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G?JAVA中仅仅支持单一继承,同时JAVA采用Interface(接口)实现多重继承而避免父类二义性,46,3.10多态,存在于子类和超类之间多个子类同属一个超类,所有子类有相同的超类(继承超类的方法)在不同的子类中同样的方法有不同的表现形式,47,3.10多态,子类对父类的变量隐藏和方法覆盖变量隐藏:当子类的成员变量与父类的成员变量同名时,称子类的成员变量隐藏了父类的成员变量.子类用super调用父类的同名变量:super.变量名,48,3.10多态,publicclassExtendsExampublicstaticvoidmain(Stringargs)subclasse=newsubclass();System.out.println(Sup_getX()方法结果:+e.Sup_getX();System.out.println(Sub_getX()方法结果:+e.Sub_getX();classsuperclasspublicintx=10;intSup_getX()return(x);classsubclassextendssuperclassprivateintx=20;intSub_getX()return(x);,49,3.10多态,方法覆盖:子类重新定义从父类继承来的同名方法称为方法的覆盖.子类用super调用父类的同名方法:super.方法名()注:方法覆盖仅发生在两个方法的名字、参数列表和返回值完全一致的情况下.否则,会产生编译错误.,50,3.10多态,classsuperClassvoidsuperPrint()System.out.println(ThisissuperClass!);classsubClassextendssuperClassvoidsuperPrint()System.out.println(ThisissubClass!);publicclassmyInheritpublicstaticvoidmain(Stringargs)subClasssubObject=newsubClass();subObject.superPrint();/子类对象调用子类的方法superClasssuperObject=newsuperClass();superObject.superPrint();/父类对象调用父类的方法,51,方法重写,publicclassTmanextendsSmanpublicintweight;publicTman(StringInitsex,intInitweight)super(Initsex);weight=Initweight;publicvoidmax(intx,inty)if(xy)System.out.println(x);elseSystem.out.println(y);publicvoidsum(doubled,doublee)doubles=d+e;Sy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电商平台数据分析在供应链优化中的应用报告
- 烹饪营养与卫生(第3版)-课件 15.项目四任务二.食物中毒及其预防 (一)
- 校长在全校教职工工作会议上的讲话:守好饭碗、护好学生、建好学校
- 幽默安全培训开场白课件
- XXXX社区党支部学习教育总结报告范文
- 2025年求职招聘应用与数字广告洞察分析报告
- 岩石与矿产的课件
- 输煤检修培训课件
- 本章总结提升
- 输液室讲的课件
- 应用技术推广中心 报告1212
- 理财规划大赛优秀作品范例(一)
- 一级烟草专卖管理师理论考试题库(含答案)
- 小学数学《分数除法》50道应用题包含答案
- 教学第七章-无机材料的介电性能课件
- 应急值班值守管理制度
- 外国文学史-总课件
- 《中小企业划型标准规定》补充说明
- 房屋租赁信息登记表
- 六年级上册数学课件-1.6 长方体和正方体的体积计算丨苏教版 (共15张PPT)
- 小学生汉字听写大赛题库
评论
0/150
提交评论