您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第6章-面向对象的Java实现-封装
面向对象的Java实现-封装第六章2相关课程回顾publicclassTest{publicstaticvoidmain(String[]args){for(inti=0;i10;i++){System.out.println(i);}System.out.println(i==10);}}请举例说明类与对象的区别与联系。超出了变量i的访问范围请指出下列Java代码中存在的错误,并改正。3预习检查举例说明什么是方法重载?Java中的构造方法与实例方法,有什么区别?4本章任务升级HelloACCP,输出ACCP5.0教员的自我介绍:对属性进行封装用构造方法实现对象成员的初始化对构造方法进行重载5理解封装的概念掌握private关键字掌握构造方法掌握方法重载本章目标本章重难点重点:理解封装的概念掌握实现封装的具体步骤掌握构造方法的使用掌握方法重载(Overload)难点:掌握实现封装的具体步骤掌握方法重载67为什么需要封装2-1编写一个类,代表ACCP5.0教员,要求:具有属性:姓名、年龄具有行为:自我介绍ACCP5.0教员的最小年龄要求:22岁publicclassAccpTeacher1{publicStringname;//教员姓名publicintage;//年龄/***返回自我介绍的内容*/publicStringintroduction(){return大家好!我是+name+,我今年+age+岁;}}8为什么需要封装2-2编写一个测试类,要求:实例化一个教员对象,并对其初始化在控制台输出该教员的自我介绍publicclassAccpTeacher1Test{publicstaticvoidmain(String[]args){AccpTeacher1teacher=newAccpTeacher1();teacher.name=李芳;teacher.age=10;System.out.println(teacher.introduction());}}要满足教员的最小年龄要求,可以通过对属性的封装来实现大家好!我是李芳,我今年10岁9什么是封装publicclassAccpTeacher2{privateStringname;//教员姓名//返回教员姓名publicStringgetName(){returnname;}//设定教员姓名publicvoidsetName(Stringname){this.name=name;}}封装,就是隐藏实现细节将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性AccpTeacher2teacher=newAccpTeacher2();teacher.setName(李芳);StringtName=teacher.getName();通过setter、getter方法访问name属性this代表当前类的实例10如何实现封装2-1封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制publicclassAccpTeacher3{privateStringname;//教员姓名privateintage;//年龄publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age22){System.out.println(错误!最小年龄应为22岁!);this.age=22;//如果不符合年龄要求,则赋予默认值}else{this.age=age;}}//此处省略对name属性的setter、getter方法}12311如何实现封装2-2publicclassAccpTeacher3Test{publicstaticvoidmain(String[]args){AccpTeacher3teacher=newAccpTeacher3();teacher.setName(李芳);teacher.setAge(10);System.out.println(teacher.introduction());}}使用封装,增加了数据访问限制,增强了程序的可维护性错误!最小年龄应为22岁!大家好!我是李芳,我今年22岁测试类通过调用setter方法,为对象的各个属性赋值12小结1使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?在Java程序中,代码封装带给我们的好处是什么?1、隐藏一个类的实现细节2、防止对封装数据的未经授权的访问3、有利于保证数据的完整性4、便于修改,增强代码的可维护性5、有选择地向外界提供数据this关键字Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。-构造器中指该构造器所创建的新对象–方法中指调用该方法的对象this关键字的用法–在类本身的方法或构造器中引用该类的实例变量和方法–将当前对象作为参数传递给其它方法或构造器–用来调用其他的重载的构造器13访问控制在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。14访问控制访问控制的限制程度从高到低如下图所示。注意,default不是一个修饰符,它只是用来表示一种不加任何修饰符时的状态。1516小结2请通过代码封装,实现如下需求:编写一个类Book,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200为各属性设置赋值和取值方法具有方法:detail,用来在控制台输出每本教材的名称和页数编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确总结下实现封装的具体步骤:完整代码实现17为什么需要构造方法2-1开发ACCP5.0教员类AccpTeacher4,要求:具有属性:姓名、年龄、学历、职位具有行为:自我介绍publicclassAccpTeacher4{privateStringname;//姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位publicStringintroduction(){return大家好!我是+name+,我今年”+age+岁,学历“+education+,目前职位是+position;}publicStringgetName(){returnname;}publicvoidsetName(StringmyName){name=myName;}//以下是其他属性的setter、getter方法,此处省略}18为什么需要构造方法2-2编写一个测试类,要求:实例化一个教员对象,并对其初始化在控制台输出该教员的自我介绍publicclassAccpTeacher4Test{publicstaticvoidmain(String[]args){AccpTeacher4teacher=newAccpTeacher4();teacher.setName(李芳);teacher.setAge(23);teacher.setEducation(本科);System.out.println(teacher.introduction());}}要简化对象初始化的代码,可以通过构造方法来解决大家好!我是李芳,我今年23岁,学历本科,目前职位是nullAccpTeacher4中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?19什么是构造方法构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型publicclassAccpTeacher5{privateStringname;//教员姓名//构造方法publicAccpTeacher5(){name=无名氏;}}publicclassAccpTeacher5Test{publicstaticvoidmain(String[]args){AccpTeacher5teacher=newAccpTeacher5();}}使用new关键字调用构造方法20带参数的构造方法2-1通过带参数的构造方法,显式地为实例变量赋予初始值publicclassAccpTeacher6{privateStringname;//教员姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位//带参数的构造方法publicAccpTeacher6(StringpName,intpAge,StringpEducation,StringpPosition){name=pName;age=pAge;//可以增加对age等属性的存取限制条件education=pEducation;position=pPosition;}publicStringintroduction(){return大家好!我是+name+,我今年+age+岁,学历+education+,目前职位是+position;}}21带参数的构造方法2-2通过调用带参数的构造方法,简化对象初始化的代码publicclassAccpTeacher6Test{publicstaticvoidmain(String[]args){AccpTeacher6teacher=newAccpTeacher6(李芳,23,本科,咨询师);System.out.println(teacher.introduction());}}创建对象时,一并完成了对象成员的初始化工作大家好!我是李芳,我今年23岁,学历本科,目前职位是咨询师对象的构造和初始化Students1;---为引用类型变量分配引用空间newStudent(Lisa,Male,1,18);创建一个新的对象,并进行属性(实例变量)的默认初始化各种数据类型作为实例变量时的默认初始值参见下表22对象的构造和初始化执行构造方法:将传递进来的四个参数的值分别赋给四个属性s1=newStudent(Lisa,Male,1,18);23对象的构造和初始化最后,对引用类型变量s1赋值。将新创建的Student对象的存储空间的首地址赋给s12425生活中的方法重载类方法方法参数方法实现司机轿车巴士火车驾驶启动、行驶、……等待乘客上车、启动、行驶、到站停车、……正点发车、行驶、到站停车、……如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同26方法重载的代码示例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方法方法重载27方法重载的代码示例2java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法Mathmax(inta,intb)max(floata,floatb)max(longa,longb)max(doublea,doubleb)pub
本文标题:第6章-面向对象的Java实现-封装
链接地址:https://www.777doc.com/doc-6234419 .html