理工课件-java基础2-面向对象5oop封装_第1页
理工课件-java基础2-面向对象5oop封装_第2页
理工课件-java基础2-面向对象5oop封装_第3页
理工课件-java基础2-面向对象5oop封装_第4页
理工课件-java基础2-面向对象5oop封装_第5页
免费预览已结束,剩余32页可下载查看

付费下载

下载本文档

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

文档简介

JAVA核心技术OOP2

封装相关词汇单

词说

明this这,这个static静态的package包裹,包import引入,导入overloaded重载,超载overloadedmethod方法重载本章知识点属性的封装构造函数方法的重载this关键字为什么需要封装2-1编写一个类,代表教员,要求:具有属性:姓名、年龄具有行为:自我介绍教员的最小年龄要求:22岁publicclassTeacher1{publicStringname;//教员姓名publicintage;//年龄/***返回自我介绍的内容*/publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"岁";}}为什么需要封装2-2编写一个测试类,要求:实例化一个教员对象,并对其初始化在控制台输出该教员的自我介绍publicclassTeacher1Test{publicstaticvoidmain(String[]args){Teacher1teacher=newTeacher1();="李芳";teacher.age=10;System.out.println(roduction());}}要满足教员的最小年龄要求,可以通过对属性的封装来实现大家好!我是李芳,我今年10岁封装,就是隐藏实现细节将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性什么是封装publicclassTeacher2{privateStringname;//教员姓名//返回教员姓名publicStringgetName(){

returnname;}//设定教员姓名publicvoidsetName(Stringname){

=name;}}

Teacher2teacher=newTeacher2();teacher.setName("李芳");StringtName=teacher.getName();通过setter、getter方法访问name属性this代表当前类的实例如何实现封装2-1封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制publicclassTeacher3{privateStringname;//教员姓名privateintage;//年龄publicintgetAge(){ returnage;}publicvoidsetAge(intage){if(age<22){System.out.println("错误!最小年龄应为22岁!");this.age=22;//如果不符合年龄要求,则赋予默认值}else{this.age=age;}}//此处省略对name属性的setter、getter方法}123如何实现封装2-2publicclassTeacher3Test{publicstaticvoidmain(String[]args){ Teacher3teacher=newTeacher3(); teacher.setName("李芳"); teacher.setAge(10); System.out.println(roduction());}}使用封装,增加了数据访问限制,增强了程序的可维护性错误!最小年龄应为22岁!大家好!我是李芳,我今年22岁测试类通过调用setter方法,为对象的各个属性赋值小结1使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?在Java程序中,代码封装带给我们的好处是什么?使用封装,增加了数据访问限制,增强了程序的安全性和可维护性小结2请通过代码封装,实现如下需求:编写一个类Book,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200为各属性设置赋值和取值方法具有方法:detail,用来在控制台输出每本教材的名称和页数编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确为什么需要构造方法2-1开发教员类Teacher4,要求:具有属性:姓名、年龄、学历、职位具有行为:自我介绍publicclassTeacher4{privateStringname;//姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位publicStringintroduction(){return"大家好!我是"+name+",我今年”+age+"岁,学历“

+education+",目前职位是"+position;}publicStringgetName(){ returnname;}publicvoidsetName(StringmyName){ name=myName;}//以下是其他属性的setter、getter方法,此处省略}为什么需要构造方法2-2编写一个测试类,要求:实例化一个教员对象,并对其初始化在控制台输出该教员的自我介绍publicclassTeacher4Test{publicstaticvoidmain(String[]args){Teacher4teacher=newTeacher4();teacher.setName("李芳");teacher.setAge(23);teacher.setEducation("本科");System.out.println(roduction());}}要简化对象初始化的代码,可以通过构造方法来解决大家好!我是李芳,我今年23岁,学历本科,目前职位是nullTeacher4中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?什么是构造方法构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型publicclassTeacher5{privateStringname;//教员姓名//构造方法publicTeacher5(){name="无名氏";}}publicclassTeacher5Test{publicstaticvoidmain(String[]args){ Teacher5teacher=newTeacher5();}}使用new关键字调用构造方法带参数的构造方法2-1通过带参数的构造方法,显式地为实例变量赋予初始值publicclassTeacher6{privateStringname;//教员姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位//带参数的构造方法publicTeacher6(StringpName,intpAge,StringpEducation,StringpPosition){name=pName;age=pAge;//可以增加对age等属性的存取限制条件education=pEducation;position=pPosition;}publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"岁,学历"+education+",目前职位是"+position;}}带参数的构造方法2-2通过调用带参数的构造方法,简化对象初始化的代码publicclassTeacher6Test{publicstaticvoidmain(String[]args){Teacher6teacher=newTeacher6("李芳",23,“本科”,“工程师");System.out.println(roduction());}}创建对象时,一并完成了对象成员的初始化工作大家好!我是李芳,我今年23岁,学历本科,目前职位是工程师小结3编写一个类Book2,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200具有方法:detail,用来在控制台输出每本教材的名称和页数。具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制编写测试类Book2Test进行测试:初始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确生活中的方法重载类方法方法参数方法实现司机轿车巴士火车驾驶启动、行驶、……等待乘客上车、启动、行驶、到站停车、……正点发车、行驶、到站停车、……如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同方法重载的代码示例1方法重载并不陌生java.io.PrintStream类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式publicclassTest{publicstaticvoidmain(String[]args){inti=0;charc='z';Stringstr="hello";System.out.println(i);System.out.println(c);System.out.println(str);}}PrintStreamprintln(int)println(char)println(String)……方法名相同,参数类型不同调用不同的println方法方法重载方法重载的代码示例2java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法Mathmax(inta,intb)max(floata,floatb)max(longa,longb)max(doublea,doubleb)publicclassTest{publicstaticvoidmain(String[]args){Math.max(1,2);Math.max(1.0F,2.F);Math.max(1.0,2);}}方法重载重载对比方法名:sumInt方法名:sumDobule方法名:sumAll方法名:sumAll不使用方法重载需要记两个方法名,使用重载只需要记一个方法名构造方法重载2-1构造方法重载是方法重载的典型示例publicclassTeacher7{privateStringname;//教员姓名privateStringschool=“厦门大学";//所在中心publicTeacher7(Stringname){ =name;//设定教员姓名}publicTeacher7(Stringname,Stringschool){=name;//设定教员姓名this.school=school;//设定教员的所在学校}publicStringintroduction(){ return"大家好!我是"+school+"的"+name;}}构造方法重载构造方法重载2-2通过调用不同的构造方法来表达对象的多种初始化行为例如:默认情况下,教师来自北京中心,初始化时,只需提供教员姓名有时,需要提供所在中心名称及教员姓名publicclassTeacher7Test{publicstaticvoidmain(String[]args){Teacher7teacher1=newTeacher7("李芳");System.out.println(roduction());Teacher7teacher2=newTeacher7("张欣",

“集美大学");System.out.println(roduction());}}大家好!我是厦门大学的李芳大家好!我是集美大学的张欣小结4编写一个类Book3,代表教材:具有属性:名称(title)、页数(pageNum)、种类(type)具有方法:detail,用来在控制台输出每本教材的名称、页数、种类具有两个带参构造方法:第一个构造方法中,设置教材种类为“计算机”(固定),其余属性的值由参数给定;第二个构造方法中,所有属性的值都由参数给定编写测试类Book3Test进行测试:分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确对象在内存中的存放形式成员方法1成员方法2……成员方法n成员变量1成员变量2……成员变量n成员变量1成员变量2……成员变量n成员变量1成员变量2……成员变量n对象1对象3对象2每个对象都有自己独立的数据成员,但是所有的对象共享成员方法。this关键字既然所有的对象都共用相同的成员方法,那么在不同的对象都调用同一方法时,它是怎么确定要使用哪个对象的数据成员呢?每个成员方法都有一个隐含的this引用,它总是指向调用它的对象;关键字this给出用于调用成员方法的对象的地址;每当调用成员方法时,编译器会向this分配调用该方法的对象的地址;可以像使用任何引用那样使用this。this引用示例/*this示例,代码片段*/public

classStudent//定义学生类{

privateStringmName;//姓名

private

intmAge;//年龄

publicStudent(Stringname,intage){

//隐式调用,等同于this.mName=name;mName=name;

//显式调用,等同于mAge=age;

this.mAge=age;}……}静态成员变量在成员变量前加static关键字,可以将其声明为静态成员变量;如果类中成员变量被定义为静态,那么不论有多少个对象,静态成员变量只有一份内存拷贝,即所有对象共享该成员变量;静态成员变量的作用域只在类内部,但其生命周期却贯穿整个程序。静态成员变量示例classDog{

public

static

intcount=0;//静态成员变量

publicDog()//构造方法

{count++;}}public

classTest{

public

static

voidmain(String[]args){System.out.println("当前狗的数量是:"+Dog.count);Dogd1=newDog();Dogd2=newDog();System.out.println("当前狗的数量是:"+Dog.count);}}静态成员变量的注意事项和程序同生命周期;在没有实例化对象时,可以通过类名访问静态成员变量;也可以通过对象访问静态成员变量,但不论使用的是哪个对象,访问到的都是同一个变量;静态成员变量在声明时最好初始化,如果不进行初始化,系统会默认初始化为初始值。静态成员方法在成员方法前加static关键字,可以将其声明为静态成员方法;静态成员方法只能对类的静态成员变量进行操作;静态成员方法没有this引用;在没有实例化对象时,可以通过类名访问静态成员方法。静态成员方法示例classDog{

privatestaticintcount=0;//静态成员变量

publicDog(){count++;}

//显示数量的方法,静态成员方法

public

static

voiddisplayCount(){System.out.println("当前狗的数量是:"+count);}}public

classTest{

public

static

voidmain(String[]args){

//没有实例化对象之前,直接通过类名调用静态成员方法

Dog.displayCount();Dogd1=newDog();Dogd2=newDog();Dog.displayCount();}}静态成员小结静态成员包括静态数据成员和静态成员方法;静态成员属于整个类而不是属于某个对象,它被该类的所有对象共享;访问静态成员时一般通过类名访问,也可以通过对象访问;静态成员也受访问权限的约束;静态数据成员在使用之前应尽量初始化;静态成员方法不能操作非静态成员;静态成员方法没有this引用。总结方法重载可以方便方法的调用者,但方法重载应遵循三大原则:方法名相同参数列表不同属于同一作用域可以适当地重载构造方法,使初始化

温馨提示

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

最新文档

评论

0/150

提交评论