




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章类与对象第1页,共64页,2023年,2月20日,星期三基本内容第2页,共64页,2023年,2月20日,星期三类和对象的基本知识什么是类什么是对象类和对象的关系如何用Java来实现类成员变量(属性)成员方法(函数、行为、过程)构造方法如何创建和使用对象对象的引用合和实体实例变量和类变量实例方法和类方法this关键字第3页,共64页,2023年,2月20日,星期三什么是类思考:如何向别人描述一个陌生的事物?类比:动物园里如何介绍动物?结论:现实生活中无论任何事物,我们都可以用属性和行为这两个方面把它描述清楚。事物分类标准(好学生与坏学生,学生和老师)结论:通过属性和行为对不同事物分类类定义:类是具有相同属性和行为的一组对象的集合。第4页,共64页,2023年,2月20日,星期三什么是对象对男生而言,女朋友是对象吗?对象的定义:把符合某类标准的一个具体的事物称为这个类的一个对象,也把对象称为类的实例。第5页,共64页,2023年,2月20日,星期三类与对象的关系第6页,共64页,2023年,2月20日,星期三类与对象的Java实现第7页,共64页,2023年,2月20日,星期三类的基本结构classPeople//类的声明{ Stringname;//属性,由变量实现
intage;
booleangender;
voidspeak(){}//行为,由方法实现
voidwalk(){}Stringread(Stringbook){}intadd(intx,inty){}}类体第8页,共64页,2023年,2月20日,星期三类中的方法第9页,共64页,2023年,2月20日,星期三方法的基本结构第10页,共64页,2023年,2月20日,星期三方法的代码实现intadd(intx,inty){
intt=-1;if(x>=0&&y>=0)t=x+y;returnt;
}第11页,共64页,2023年,2月20日,星期三关于方法的注意事项1)在方法定义中,方法的返回类型与return后面的变量或常量类型保持一致。2)在方法调用时,给方法传递的参数需要与方法定义时的参数保持一致(参数个数一致,参数类型一致)。3)方法定义时的返回类型与接收方法返回值的变量类型保持一致。4)方法可以重载(特征:1、具有相同方法名,2、但参数个数或参数类型不同)
第12页,共64页,2023年,2月20日,星期三创建类第13页,共64页,2023年,2月20日,星期三问题分析第14页,共64页,2023年,2月20日,星期三实现代码第15页,共64页,2023年,2月20日,星期三值得注意的问题类名的首字符要求大写并符合标识符命名规范除去属性的声明,其他代码必须写在方法体(函数)内部。实例方法可以属性(成员变量)和局部变量(如形式参数或方法体内定义的变量)一个类中的方法可以互相调用第16页,共64页,2023年,2月20日,星期三创建并使用对象第17页,共64页,2023年,2月20日,星期三创建并使用对象示例第18页,共64页,2023年,2月20日,星期三特殊说明TestStudent类为Student的测试类,也可以命名为RunStudent,其中包含一个特殊的方法main();暂时记住对象使用分两步,声明和创建,并且必须经过创建才能使用方法部分由三个匹配,即声明部分返回的类型与方法体里具体返回的类型与调用方法时承接的类型。如返回int根据类型自动转换用float可以承接。第19页,共64页,2023年,2月20日,星期三使用对象小结第20页,共64页,2023年,2月20日,星期三练习第21页,共64页,2023年,2月20日,星期三构造方法使用场景:完成初始化操作基本特点:是特殊的方法,方法名与类名相同并且没有返回值。示例Student.java构造方法的运行机理,即什么时候被谁调用第22页,共64页,2023年,2月20日,星期三构造方法特点小结第23页,共64页,2023年,2月20日,星期三构造方法的分类显式构造方法:开发者编写,可以看到,因参数类型和参数个数的不同,一个类中可以有多个构造函数(这种现象称为构造方法的重载)。隐式构造方法:由编译器生成,在源码中我们看不见它,但在.class中存在。注意只有当类中没有显式构造方法时,系统才会添加隐式构造方法。注意:构造方法和普通方法一样可以重载第24页,共64页,2023年,2月20日,星期三成员变量与局部变量的区别局部变量使用前必须要声明并赋初值;成员变量使用前必须要声明,但可以不赋初值。
成员变量与局部变量的联系与区别:a)无论是成员变量还是局部变量,使用前都需要声明(定义)。b)对于局部变量来说,使用前必须要初始化;对于成员变量来说,使用前可以不初始化。如果没有初始化成员变量就开始使用,那么每个类型的成员变量都有一个默认的初始值:i.byte、short、int、long类型的初始值为0ii.float、double类型的初始值为0.0iii.char类型的初始值‘\u0000’iv.boolean类型的初始值为falseV.对象类型的初始值为null,即空对象第25页,共64页,2023年,2月20日,星期三对象的引用和实体第26页,共64页,2023年,2月20日,星期三对象的引用与实体bababa第27页,共64页,2023年,2月20日,星期三引用类型---类类型引用类型是用在对象上的。一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象。如果一个对象被多个引用所指向,那么无论哪个引用对对象的属性进行了修改,都会反映到其他的引用当中。引用类型与基本类型有本质的不同(举例说明)第28页,共64页,2023年,2月20日,星期三static关键字成员变量:实例变量和类变量实例变量:相同类的不同对象,其实例变量分配不同的内存空间,分配时机:对象被创建时访问方式:通过对象访问类变量(用static修饰)同属一个类的所有对象的类变量共享一块内存空间分配时机:类被加载时,类被加载后才能用来创建对象访问方式:通过类名或对象访问成员方法:实例方法和类方法实例方法相同类的不同对象,其实例方法共享同一入口地址创建类的第一个对象时分配入口地址,创建其他对象时不再分配;访问方式:通过对象访问,并能操作实例变量和类变量。类方法(用static修饰)分配时机:类被加载时访问方式:通过类名或对象访问注意:类方法不能操作实例变量,为什么?能调用实例方法吗?第29页,共64页,2023年,2月20日,星期三this关键字this应用于实例方法和构造方法中,不能出现在类方法中this可以简单理解为当前对象第30页,共64页,2023年,2月20日,星期三类与对象进阶参数传值方法之间的相互调用传值类型类作为参数类型或返回值类型的应用类的管理包Import语句访问权限PublicProtectedPrivate友好Public类和友好类第31页,共64页,2023年,2月20日,星期三参数传值方法被调用时,如果有参数,参数必须实例化(即参数变量必须有具体的值)传值方式:按值传递传值类型:(演示两种不同类型的区别)基本数据类型参数的传值传递基本数据类型变量的一个副本被传值的类型级别不高于参数类型的级别引用类型(对象、数组)参数的传值传递参数的引用,而不是实体类型要求兼容第32页,共64页,2023年,2月20日,星期三作为普通类型使用的类类看作是自己定义的一种数据类型,可以象使用基本数据类型那样使用。类作为一种数据类型可以作为参数和方法的返回类型类比: 基本数据类型的用法
intadd(intx,inty){returnx+y;}
引用类型类的用法
classpoint{intx;inty;}pointadd(pointp1,pointp2){pointp=newpoint();p.x=p1.x+p2.x;p.y=p1.y+p2.y;Returnp;}第33页,共64页,2023年,2月20日,星期三包和import语句package包名一般为域名的逆反包的作用:对类进行有效管理,避免类名冲突Import语句用于引入包中的类第34页,共64页,2023年,2月20日,星期三访问权限私有变量和私有方法用private
修饰在另外类中创建的对象不能访问自己的私有变量和私有方法若为私有类变量(类方法),在另外类中也不能通过类名来操作这个私有类变量(类方法)。公有变量和公有方法用public修饰任何地方的类能通过相关对象访问,或通过类名访问(类变量或类方法)受保护的成员变量和方法用protected修饰在同个包中的其它类中,能通过相关对象或类名访问对应成员友好变量和友好方法没有任何修饰符修饰在同个包中的其它类中,能通过相关对象或类名访问对应成员public类与友好类public类:可以在任何类中,使用public类创建对象友好类:没有public修饰的类,另外类使用友好类创建对象时,要求这两个类在同一包中。第35页,共64页,2023年,2月20日,星期三类的继承父类(超类)和子类(派生类):子类继承父类的属性和方法,也可以增加自己的属性和方法。语法形式:
class子类名extends父类名{
新增的属性;新增的方法;
}Java中,子类只能有一个父类第36页,共64页,2023年,2月20日,星期三子类的继承性子类从父类中继承的成员,就如同在子类中声明的一样,具有相同的访问特征。如果子类中声明的实例方法不能操作父类的某个成员变量,则该成员变量就没被继承。子类与父类在同一包中的继承性子类能继承父类中除了用private修饰的成员以外的所有成员,并且成员的访问权限保持不变。子类与父类不在同一包中的继承性子类继承父类的protected、public修饰的成员第37页,共64页,2023年,2月20日,星期三成员变量的隐藏和方法的重写成员变量的隐藏子类中声明的成员变量与父类中的成员变量同名成员方法的隐藏重写父类中出现过的方法,该方法要求方法名、返回类型、参数个数和类型严格一致,即除了方法体以外其他部分完全相同。子类对象调用隐藏方法时,调用的是重写的方法若真想调用父类中被隐藏的方法,则需要通过super关键字重写方法可以操作继承的成员变量,当然也能操作子类中声明的成员变量
第38页,共64页,2023年,2月20日,星期三final关键字可以修饰类、方法、成员变量和方法中的参数修饰类时,说明该类不能被继承,即没子类修饰方法时,则该方法不能被重写修饰成员变量,即该成员变量为常量(必须给初值),不能再赋值修饰方法中的参数,则该参数的值不能被改变第39页,共64页,2023年,2月20日,星期三4.9对象的上转型对象
假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时:
Aa;Bb=newB();a=b;称这个A类对象:a,是子类对象b的上转型对象.
即父类引用指向子类对象。对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原子类对象的一些属性和功能。第40页,共64页,2023年,2月20日,星期三上转对象不能操作子类新增的成员变量(失掉了这部分属性);不能使用子类新增的方法(失掉了一些功能)。上转型对象可以操作子类继承或隐藏成员变量,也可以使用子类继承的或重写的方法。上转型对象操作子类继承或重写的方法时,就是通知对应的子类对象去调用这些方法。因此,如果子类重写了父类的某个方法后,对象的上转型对象调用这个方法时,一定是调用了这个重写的方法。可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有属性和功能。第41页,共64页,2023年,2月20日,星期三4.10多态性
多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为.当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。那么当我们把子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转的对象在调用这个方法时就可能具有多种形态.第42页,共64页,2023年,2月20日,星期三4.11abstract类和abstract方法
用关键字abstract修饰的类称为abstract类(抽象类)。abstractclassA{…}第43页,共64页,2023年,2月20日,星期三abstract类有如下特点
和普通的类相比,abstract类可以有abstract方法。对于abstract方法,只允许声明,不允许实现,而且不允许使用final修饰abstract方法。abstractclassA{abstractintmin(intx,inty);intmax(intx,inty){returnx>y?x:y;}}第44页,共64页,2023年,2月20日,星期三abstract类不能用new运算创建对象
对于abstract类,我们不能使用new运算符创建该类的对象,需产生其子类,由子类创建对象,如果一个类是abstract类的子类,它必须具体实现父类的abstract方法,这就是为什么不允许使用final修饰abstract方法的原因。一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现,抽象类中的抽象方法可以强制子类必须给出这些方法的具体实现。第45页,共64页,2023年,2月20日,星期三4.12super关键字
子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,而且super必须是子类构造方法中的头一条语句。如果我们在子类中想使用被子类隐藏了的父类的成员变量或方法就可以使用关键字super。比如:super.x、super.play(),就是被子类隐藏的父类的成员变量x和方法play()。第46页,共64页,2023年,2月20日,星期三4.13接口
Java不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。第47页,共64页,2023年,2月20日,星期三1.接口的声明与使用
使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾。如:interfacePrintable{finalintMAX=100;voidadd();floatsum(floatx,floaty);}第48页,共64页,2023年,2月20日,星期三接口的使用
一个类通过使用关键字implements声明自己使用一个或多个接口。如果使用多个接口,用逗号隔开接口名。如:classAimplementsPrintable,Addable如果一个类使用了某个接口,那么这个类必须实现该接口的所有方法,即为这些方法提供方法体.第49页,共64页,2023年,2月20日,星期三2.理解接口
接口的思想在于它可以增加很多类都需要实现的功能,使用相同的接口类不一定有继承关系.同一个类也可以实现多个接口。接口只关心功能,并不关心功能的具体实现.第50页,共64页,2023年,2月20日,星期三3.接口回调
接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法.第51页,共64页,2023年,2月20日,星期三4.接口做参数
一个方法的参数是接口类型,就可以将任何实现该接口的类的实例的引用传递给该接口参数,接口参数就可以回调类实现的接口方法。第52页,共64页,2023年,2月20日,星期三4.14内部类
Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类。内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。第53页,共64页,2023年,2月20日,星期三4.15匿名类
和类有关的匿名类当使用类创建对象时,程序允许我们把类体与对象的创建组合在一起,也就是说,类创建对象时,除了构造方法还有类体,此类体被认为是该类的一个子类去掉类声明后的类体,称作匿名类。和接口有关的匿名类
Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了接口的类去掉类声明后的类体,称作匿名类.第54页,共64页,2023年,2月20日,星期三4.16异常类
程序运行出现异常时,Java运行环境就用异常类Exception的相应子类创建一个异常对象,并等待处理,例如,读取一个不存在的文件时,运行环境就用异常类IOException创建一个对象,异常对象可以调用如下方法得到或输出有关异常的信息:publicStringgetMessage()publicvoidprintStackTrace()publicStringtoString()第55页,共64页,2023年,2月20日,星期三使用try~catch语句来处理异常,将可能出现的异常操作放在try~catch语句的try部分,当try部分中的某个语句发生异常后,try部分将立刻结束执行,而转向执行相应的catch部分;所以程序可以将发生异常后的处理放在catch部分。try~catch语句可以由几个catch组成,分别处理发生的相应异常。第56页,共64页,2023年,2月20日,星期三try~catch语句的格式如下:try{
包含可能发生异常的语句
}catch(ExceptionSubClass1e){}catch(ExceptionSubClass2e){}第57页,共64页,2023年,2月20日,星期三4.17Class类
Class是java.lang包中的类,该类的实例用来封装对象运行时的状态。当一个类被加载且创建对象时,和该类相关的一个类型为Calss的对象就会自动创建。Class类本身不提供构造方法,因此,不能使用new运算符和构造方法显示地创建一个Class对象。任何对象调用getClass()方法都可以获取和该对象相关的一个Class对象,这个Class对象调用如下的方法可以获取创建对象的类的有关信息.第58页,共64页,2023年,2月20日,星期三使用Class实例化一个对象
创建对象最常用的方式就是使用new运算符和类的构造方法,实际上我们也可以使用Class对象得到一个类的实例。为了得到一个类的对象,可以先得到一个和该类相关的Class对象,做到这一点并不困难,只要使用Class的类方法publicstaticClassforName(StringclassName)throwsClassNotFoundException就可以返回一个和参数className指定的类相关的Class对象。再让这个Class对象调用publicObjectnewInstance()throwsInstantiationException,IllegalAccessException方法就可以得到一个className类的对象。第59页,共64页,2023年,2月20日,星期三4.18基本类型的类包装
Java的基本数据类型包括:byte、int、short、long、float、double、char。Java同时也提供了基本数据类型相关的类,实现了对基本数据类型的封装。这些类在java.lang包中,分别是:Byte、Integer、Sh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年都市风采电动车项目市场调查研究报告
- 2025年透明眼项目市场调查研究报告
- 2025年水晶胶商标徽章项目市场调查研究报告
- 商业视角下的教育软件市场扩张路径
- 情境赋能:高中思想政治课教学的创新路径探究
- 教育公平的新篇章青年创业者用科技和创新改变未来
- 小学班主任评价素养的多维度剖析与进阶路径研究
- 宋词通感隐喻:认知模式、建构逻辑与美学意蕴的深度剖析
- 大型热电联产机组抽汽性能与系统优化:基于多维度分析与策略研究
- 2025年中学教师资格考试《综合素质》教育研究方法高频考点题库试卷
- NBT-10781-2021空气源热泵污泥干化机
- 河南省洛阳市2023-2024学年八年级下学期期末质量检测英语试题
- CJT244-2016 游泳池水质标准
- 淄博市临淄区2022-2023学年七年级下学期期中数学试题
- 心功能不全试题库及答案
- 河南省郑州市郑东新区2023-2024学年六年级下学期期末语文试题
- FZ∕T 61002-2019 化纤仿毛毛毯
- 妊娠期糖尿病案例分析讨论总结
- 小升初数学模拟试卷北师大版选拔卷
- 2021年高考理科数学全国新课标卷1(附答案)
- 室上性心动过速护理
评论
0/150
提交评论