




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面向对象程序设计一
----类和对象封装第四章预习检查类和对象的关系方法如何定义封装的概念掌握面向对象的思想掌类和对象的使用方法的定义和使用方法的重载构造函数封装组合类和嵌套类本章目标面向对象和面向过程面向对象是相对于面向过程而言的面向过程本质上是面向机器,而不是面向问题,和实际生活相偏离面向对象的符合人们思维的一种方式,能够比较好的将现实生活和程序相结合,便于思考和实现面向对象(OO)的优点与人类的思维习惯一致把人类解决问题的思维过程转变为程序能够理解的过程信息隐藏,提高了程序的可维护性和安全性封装实现了模块化和信息隐藏封装使得在对象外部不能随意访问对象的属性和方法提高了程序的可重用性一个类可以创建多个对象实例,增加了重用性对象人们把生活中的每个物体都看成是一个对象,也就是实实在在存在的,看得见摸得着,由一组属性和方法构成属性——对象具有的各种特征每个对象的每个属性都拥有特定值方法——对象执行的操作每个对象的操作也不一定相同封装对象同时具有属性和方法两项特性对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割谁看见过只有“完好的零件和颜色”而不能开动的汽车?类顾客类轿车类
…………类是模子,确定对象将会拥有的特征(属性)和行为(方法)类具有相同属性和方法的一组对象的集合类是对象的类型不同于int类型:具有方法各种口味的球状冰淇淋类和对象的关系类是抽象的概念,仅仅是模板,比如说:“人”对象是一个你能够看得到、摸得着的具体实体小布什普京克林顿……“人”类特征(属性)年龄体重行为(方法)衣食住行Java是面向对象的语言
所有Java程序都以类class为组织单元关键字class定义自定义的数据类型
public
classHelloWorld{
publicstaticvoidmain(String[]args){ System.out.println("HelloWorld!!!"); }}Java类模板类将现实世界中的概念模拟到计算机程序中publicclass
类名{
//定义属性部分属性1的类型属性1;
属性2的类型属性2;…
属性n的类型属性n;
//定义方法部分方法1;
方法2;…
方法m;}如何定义类定义一个类的步骤1、定义类名----命名规则2、编写类的属性----就是成员变量3、编写类的方法----马上讲解如何创建和使用对象使用对象的步骤:创建对象类名对象名=new类名();引用对象成员:使用“.”进行以下操作引用类的属性:对象名.属性引用类的方法:对象名.方法名()Schoolcenter=newSchool();="北京中心";//给name属性赋值center.showCenter(); //调用showCenter()方法如何定义类的方法类的方法定义类的某种行为(或功能)方法的定义方法的名称方法的主体方法返回的数据类型定义类的方法public返回值类型方法名(){//这里编写方法的主体}步骤一:定义方法名以及返回值步骤二:编写方法体方法的返回值两种情况如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型如果方法没有返回值,返回类型为voidpublicclassStudent{Stringname="张三";publicvoidgetName(){
returnname;}……}返回类型要匹配return表达式;编译错误作用:跳出方法给出结果方法调用方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果方法调用:执行方法中包含的语句
对象名.方法名();方法调用小结方法之间允许相互调用,不需要知道方法的具体实现,提高了效率
情况
举例Student类的方法a()调用Student类的方法b(),直接调用publicvoida(){b();//调用b()}Student类的方法a()调用Teacher类的方法b(),先创建类对象,然后使用“.”调用publicvoida(){Teachert=newTeacher();t.b();//调用Teacher类的b()}为什么要用带参数的方法工作原理新鲜桃汁新鲜苹果汁新鲜梨汁输出三种果汁如何使用带参数的方法3-1定义带参数的方法调用带参数的方法publicclassZhazhi{
publicStringzhazhi(Stringfruit){Stringjuice=fruit+"汁";returnjuice;}}/*调用zhazhi方法*/ZhazhimyZhazhi=newZhazhi();StringmyFruit="苹果";StringmyJuice=myZhazhi.zhazhi(myFruit);System.out.println(myJuice);参数列表:(数据类型参数1,数据类型参数2…)调用方法,传递的参数要与参数列表一一对应如何使用带参数的方法3-2<访问修饰符>返回类型<方法名>(<形式参数列表>){ //方法的主体}该方法允许被访问调用的权限范围方法返回值的类型publicclassStudentsBiz{ String[]names=newString[30];
publicvoidaddName(Stringname){
//增加学生姓名
} publicvoidshowNames(){
//显示全部学生姓名
}}传送给方法的形参列表一个形式参数没有返回值如何使用带参数的方法3-3publicstaticvoidmain(String[]args){
StudentsBizst=newStudentsBiz();Scannerinput=newScanner(System.in);for(inti=0;i<5;i++){System.out.print("请输入学生姓名:");StringnewName=input.next();
st.addName(newName);}st.showNames();
}实参的类型、数量、顺序都要与形参一一对应先实例化对象,再使用方法调用带参数的方法对象名.方法名(实参1,实参2,……,实参n)实参列表理解方法重载生活中的方法重载表演类歌曲乐器剧本方法参数方法体publicclassPlayer{
publicvoidPlay(剧本){//根据剧本表演}publicvoidPlay(歌曲){//演唱歌曲}
publicvoidPlay(钢琴){//弹奏钢琴}}方法重载:同一个类中,方法名相同,参数项不同(参数类型不同、参数个数不同)方法重载方法重载,指同一个类中多个方法:方法名相同参数列表不同与返回值、访问修饰符无关
publicStudent(){//代码
}publicStudent(Stringname,intage){//代码}System.out.println(45);System.out.println(true);System.out.println("狗在玩耍!");构造方法5-1对象初始化Studentstu=newStudent();=name;//赋初值stu.age=age;publicclassStudent{//属性
//无参构造方法
publicStudent(){
name="小明";
age=23;
}}使用构造方法:Studentstu=new
Student();能否在创建对象的同时就完成赋值?构造方法构造方法5-2构造方法是类中一种特殊的方法,完成对象的初始化,通过new关键字调用构造方法名与类名相同,不返回任何值public
构造方法名(){//初始化代码}与类名相同没有返回值类型publicclassStudent{
publicStudent(){
name="小明";
age=23;
}}可以指定参数在构造函数中,给属性设置默认值不同对象实例化后,仍需设置不同属性值;能否实例化时一次性设置对象真正属性值?编写带参构造函数5-3带参数的构造函数publicclassStudent{
//有参构造方法 publicStudent(Stringname,intage){ =name; this.age=age; }}将参数的值,分别赋给当前实例的属性this的用法5-4this关键字指代当前类调用属性调用方法调用构造方法this.health=100;
this.name="大黄";this.print();
this();如果使用,必须是构造方法中的第一条语句this("小黑",100,100,"雄");构造方法5-5阅读代码,说出运行结果,并指出原因classPenguin{publicvoidPenguin(){ health=10;sex="雄";System.out.println("执行构造方法");}publicvoidprint(){System.out.println("企鹅的名字是"+name+",健康值是"+health+",性别是"+sex);}}Penguinpgn3=newPenguin();pgn3.print();有返回值类型,不是构造方法类的隐式构造方法构造两个对象//实例化一个学生员对象Studentstu=newStudent(name,age);
//实例化另一个程序员对象Studentstu1=newStudent();…..punlicStudent{
//省略字段、属性publicStudent(stringname,intage){//…省略}
}编译错误:不包含采用“0”参数的构造方法
演示示例:隐式构造函数每个类都默认有一个无参数的构造方法,一旦手动添加了构造方法,系统就不会再给类添加无参构造方法为什么要使用封装下面代码有什么问题?如何解决上面设计的缺陷?Dogd=newDog();d.health=1000;不合理的赋值
使用封装
什么是封装面向对象三大特征之一——封装封装的概念封装的好处封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
隐藏类的实现细节只能通过规定方法访问数据方便加入控制语句方便修改实现如何使用封装封装的步骤修改属性的可见性创建getter/setter方法在getter/setter方法中加入属性控制语句设为private用于属性的读写对属性值的合法性进行判断classDog{
privateStringname="旺财";//昵称
privateinthealth=100;//健康值
privateintlove=0;//亲密度
privateStringstrain="拉布拉多犬";//品种
publicintgetHealth(){returnhealth;}
publicvoidsetHealth
(inthealth){if(health>100||health<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省水产种苗管理办法
- 四大名著主题演讲稿
- 加油站综合管理员竞聘演讲稿
- 安全防范技术
- 安全生产标准化制定制度流程
- 产教融合:护理人才培养课程体系构建成效
- 安全生产三管三必须指的是
- 文印室工作总结
- 磁悬浮轨道交通技术及其应用研究
- 胃癌伴出血的健康宣教
- 解热镇痛抗炎药非甾体抗炎药专家讲座
- DB44-T 2410-2023红树林生态修复工程评价技术规程
- YY/T 1830-2022电动气压止血仪
- 临床、口腔医师申报卫生高级职称工作量登记表
- GB/T 10045-2018非合金钢及细晶粒钢药芯焊丝
- GB 7099-2015食品安全国家标准糕点、面包
- 2023年纳雍县财政局系统事业单位招聘笔试题库及答案解析
- 2023年广东省普通高中学业水平考试及参考答案
- 建筑工程模板施工工艺技术要点讲义丰富课件
- 浙江省建设领域简易劳动合同(A4版本)
- 位置度公差以及其计算
评论
0/150
提交评论