您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 01_面向对象特性:封装
面向对象特性:封装2本章任务对属性进行封装用构造方法实现对象成员的初始化对构造方法进行重载3理解封装的概念掌握private关键字掌握构造方法掌握方法重载本章目标静态成员:static类中的成员可以分为实例成员(非静态成员)和类成员(静态成员)静态成员用“static”关键字描述publicclassStaff{Stringname;Stringposition;staticStringenterprise;}}xxx公司姓名:张三职务:经理xxx公司姓名:李四职务:助理类成员实例成员实例属性:每个对象可以有不同的属性值。创建对象时给这个对象的属性分配内存空间。类属性:类的所有对象有同一个的属性值。程序开始运行时第一次使用类时给属性分配空间。如何访问:实例成员:类成员:对象.成员类名.成员对象.成员对象.成员类名.成员对象.成员Java的访问修饰符7为什么需要封装2-1编写一个类,代表Oracle职员,要求:具有属性:姓名、年龄具有行为:自我介绍Oracle职员的最小年龄要求:22岁publicclassOracleStaff1{publicStringname;//职员姓名publicintage;//年龄/***返回自我介绍的内容*/publicStringintroduction(){return大家好!我是+name+,我今年+age+岁;}}8为什么需要封装2-2编写一个测试类,要求:实例化一个职员对象,并对其初始化在控制台输出该职员的自我介绍publicclassOracleStaff1Test{publicstaticvoidmain(String[]args){OracleStaff1staff=newOracleStaff1();staff.name=小明;staff.age=10;System.out.println(staff.introduction());}}要满足职员的最小年龄要求,可以通过对属性的封装来实现大家好!我是小明,我今年10岁9什么是封装publicclassOracleStaff2{privateStringname;//职员姓名//返回职员姓名publicStringgetName(){returnname;}//设定职员姓名publicvoidsetName(Stringname){this.name=name;}}封装,就是隐藏实现细节将属性私有化,提供公有方法访问私有属性通过这些公有方法访问私有属性OracleStaff2staff=newOracleStaff2();staff.setName(小明);StringtName=staff.getName();通过setter、getter方法访问name属性this代表当前类的实例10如何实现封装2-1封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制publicclassOracleStaff3{privateStringname;//职员姓名privateintage;//年龄publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age22){System.out.println(错误!最小年龄应为22岁!);this.age=22;//如果不符合年龄要求,则赋予默认值}else{this.age=age;}}//此处省略对name属性的setter、getter方法}12311如何实现封装2-2publicclassOracleStaff3Test{publicstaticvoidmain(String[]args){OracleStaff3staff=newOracleStaff3();staff.setName(小明);staff.setAge(10);System.out.println(staff.introduction());}}使用封装,增加了数据访问限制,增强了程序的可维护性错误!最小年龄应为22岁!大家好!我是李芳,我今年22岁测试类通过调用setter方法,为对象的各个属性赋值12小结请通过代码封装,实现如下需求:编写一个类Book,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200为各属性设置赋值和取值方法具有方法:detail,用来在控制台输出每本教材的名称和页数编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确13为什么需要构造方法2-1开发Oracle职员类OracleStaff4,要求:具有属性:姓名、年龄、学历、职位具有行为:自我介绍publicclassStaff4{privateStringname;//姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位publicStringintroduction(){return大家好!我是+name+,我今年”+age+岁,学历“+education+,目前职位是+position;}publicStringgetName(){returnname;}publicvoidsetName(StringmyName){name=myName;}//以下是其他属性的setter、getter方法,此处省略}14为什么需要构造方法2-2编写一个测试类,要求:实例化一个职员对象,并对其初始化在控制台输出该职员的自我介绍publicclassStaff4Test{publicstaticvoidmain(String[]args){Staff4staff=newStaff4();staff.setName(小明);staff.setAge(23);staff.setEducation(本科);System.out.println(Staff.introduction());}}要简化对象初始化的代码,可以通过构造方法来解决大家好!我是小明,我今年23岁,学历本科,目前职位是nullOracleStaff4中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?15什么是构造方法构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型publicclassStaff5{privateStringname;//职员姓名//构造方法publicStaff5(){name=无名氏;}}publicclassStaff5Test{publicstaticvoidmain(String[]args){Staff5staff=newStaff5();}}•使用new关键字调用构造方法16带参数的构造方法2-1通过带参数的构造方法,显式地为实例变量赋予初始值publicclassStaff6{privateStringname;//职员姓名privateintage;//年龄privateStringeducation;//学历privateStringposition;//职位//带参数的构造方法publicStaff6(StringpName,intpAge,StringpEducation,StringpPosition){name=pName;age=pAge;//可以增加对age等属性的存取限制条件education=pEducation;position=pPosition;}publicStringintroduction(){return大家好!我是+name+,我今年+age+岁,学历+education+,目前职位是+position;}}17带参数的构造方法2-2通过调用带参数的构造方法,简化对象初始化的代码publicclassStaff6Test{publicstaticvoidmain(String[]args){Staff6staff=newStaff6(小明,23,本科,咨询师);System.out.println(Staff.introduction());}}创建对象时,一并完成了对象成员的初始化工作大家好!我是小明,我今年23岁,学历本科,目前职位是咨询师18小结3编写一个类Book2,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200具有方法:detail,用来在控制台输出每本教材的名称和页数。具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制编写测试类Book2Test进行测试:初始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确19生活中的方法重载类方法方法参数方法实现司机轿车巴士火车驾驶启动、行驶、……等待乘客上车、启动、行驶、到站停车、……正点发车、行驶、到站停车、……如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同20方法重载的代码示例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方法方法重载21方法重载的代码示例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);}}方法重载22构造方法重载2-1构造方法重载是方法重载的典型示例publicclassStaff7{privateStringname;//职员姓名privateStringschool=北京中心;//所在中心publicStaff7(Stringname){this.name=name;//设定职员姓名}publicStaff7(Stringname,Stringschool){this.name=name;//设定职员姓名this.school=school;//设定职员的所在中心}publicStringintroduction(){return大家好!我是+school+的+name;}}构造方法重载23构造方法重载2-2通过调用不同的构造方法来表达对象的多种初始化行为例如:默认情况下,职员来自北京中心,初始化时,只需提供职员姓名有时,需要提供所在中心名称及职员姓名publicclassStaff7Test{publicstaticvoidmain(String[]args){Staff7staff1=newStaff7(小明);System.out.println(staf
本文标题:01_面向对象特性:封装
链接地址:https://www.777doc.com/doc-3127587 .html