收藏 分享(赏)

第10章、面向对象的Java实现-封装.ppt

上传人:scg750829 文档编号:4606822 上传时间:2019-01-04 格式:PPT 页数:26 大小:770.50KB
下载 相关 举报
第10章、面向对象的Java实现-封装.ppt_第1页
第1页 / 共26页
第10章、面向对象的Java实现-封装.ppt_第2页
第2页 / 共26页
第10章、面向对象的Java实现-封装.ppt_第3页
第3页 / 共26页
第10章、面向对象的Java实现-封装.ppt_第4页
第4页 / 共26页
第10章、面向对象的Java实现-封装.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、软件开发 -语言篇,面向对象的Java实现-封装,第十章,/,相关课程回顾,public class Test public static void main(String args) for(int i=0;i10;i+)System.out.println(i);System.out.println(i=10); ,请举例说明类与对象的区别与联系。,超出了变量i的访问范围,请指出下列Java代码中存在的错误,并改正。,/,回顾问题,举例说明什么是方法重载? Java中的构造方法与实例方法,有什么区别?,/,本章任务,升级Hello,输出教员的自我介绍: 对属性进行封装 用构造方法实现对象成

2、员的初始化 对构造方法进行重载,/,理解封装的概念 掌握private关键字 掌握构造方法 掌握方法重载,学习目标,/,为什么需要封装 2-1,编写一个类,代表教员,要求: 具有属性:姓名、年龄 具有行为:自我介绍 教员的最小年龄要求:22岁,public class Teacher1 public String name; / 教员姓名 public int age; /年龄 /* 返回自我介绍的内容*/ public String introduction() return “大家好!我是“ + name + “,我今年“+ age+“岁“; ,/,为什么需要封装 2-2,编写一个测试类,

3、要求: 实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍,public class Teacher1Test public static void main(String args) Teacher1 teacher = new Teacher1(); teacher.name = “李芳“; teacher.age =10; System.out.println(teacher.introduction(); ,要满足教员的最小年龄要求,可以通过对属性的封装来实现,/,什么是封装,public class Teacher2 private String name; / 教员姓名

4、 / 返回教员姓名 public String getName() return name; / 设定教员姓名 public void setName(String name) this.name = name; ,封装,就是隐藏实现细节 将属性私有化,提供公有方法访问私有属性 通过这些公有方法访问私有属性,Teacher2 teacher = new Teacher2(); teacher.setName (“李芳“); String tName = teacher.getName();,通过setter、getter方法访问name属性,this代表当前类的实例,/,如何实现封装2-1,封

5、装的实现: 1、修改属性的可见性来限制对属性的访问 2、为每个属性创建一对赋值(setter)方法和取值(getter) 方法,用于对这些属性的访问 3、在setter和getter方法中,加入对属性的存取限制,public class Teacher3 private String name; / 教员姓名 private int age; /年龄public int getAge() return age; public void setAge(int age) if (age22) System.out.println(“错误!最小年龄应为22岁!“); this.age = 22; /

6、如果不符合年龄要求,则赋予默认值 else this.age = age; /此处省略对name属性的setter、getter方法 ,1,2,3,/,如何实现封装2-2,public class Teacher3Test public static void main(String args) Teacher3 teacher = new Teacher3();teacher.setName (“李芳“);teacher.setAge(10);System.out.println(teacher.introduction(); ,使用封装,增加了数据访问限制,增强了程序的可维护性,错误!最小

7、年龄应为22岁! 大家好!我是李芳,我今年22岁,测试类通过调用setter方法,为对象的各个属性赋值,/,小结 1,使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?在Java程序中,代码封装带给我们的好处是什么?,/,小结 2,请通过代码封装,实现如下需求: 编写一个类Book,代表教材: 具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200 为各属性设置赋值和取值方法 具有方法:detail,用来在控制台输出每本教材的名称和页数 编写测试类BookTest进行测试:为Book对象的属性赋予

8、初始值,并调用Book对象的detail方法,看看输出是否正确,/,为什么需要构造方法 2-1,开发教员类AccpTeacher4,要求: 具有属性:姓名、年龄、学历、职位 具有行为:自我介绍,public class Teacher4 private String name; / 姓名 private int age; / 年龄 private String education; / 学历 private String position; / 职位 public String introduction() return “大家好!我是“ + name + “,我今年” + age + “岁,

9、学历“+education+“,目前职位是“+position; public String getName() return name; public void setName(String myName) name = myName; / 以下是其他属性的setter、getter方法,此处省略 ,/,为什么需要构造方法 2-2,编写一个测试类,要求: 实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍,public class Teacher4Test public static void main(String args) Teacher4 teacher = new Te

10、acher4(); teacher.setName(“李芳“); teacher.setAge(23); teacher.setEducation(“本科“); System.out.println(teacher.introduction(); ,要简化对象初始化的代码,可以通过构造方法来解决,大家好!我是李芳,我今年23岁,学历本科,目前职位是null,Teacher4中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?,/,什么是构造方法,构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值 构造方法必须满足以下语法规则: 1、方法

11、名与类名相同 2、没有返回类型,public class Teacher5 private String name; / 教员姓名 / 构造方法 public Teacher5() name = “无名氏“; ,public class Teacher5Test public static void main(String args) Teacher5 teacher = new Teacher5(); ,使用new关键字调用构造方法,/,带参数的构造方法 2-1,通过带参数的构造方法,显式地为实例变量赋予初始值,public class Teacher6 private String nam

12、e; / 教员姓名 private int age; / 年龄 private String education; / 学历 private String position; / 职位 / 带参数的构造方法 public Teacher6(String pName,int pAge,String pEducation,String pPosition) name = pName; age = pAge; / 可以增加对age等属性的存取限制条件 education = pEducation; position = pPosition; public String introduction()

13、return “大家好!我是“ + name + “,我今年“ + age + “岁,学历“ + education + “,目前职位是“+position; ,/,带参数的构造方法 2-2,通过调用带参数的构造方法,简化对象初始化的代码,public class Teacher6Test public static void main(String args) Teacher6 teacher = new Teacher6(“李芳“,23, “本科“, “咨询师“); System.out.println(teacher.introduction(); ,创建对象时,一并完成了对象成员的初始

14、化工作,大家好!我是李芳,我今年23岁,学历本科,目前职位是咨询师,/,小结 3,编写一个类Book2,代表教材: 具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200 具有方法: detail,用来在控制台输出每本教材的名称和页数。 具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制 编写测试类Book2Test进行测试:初始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确,/,生活中的方法重载,类,方法,方法参数,方法实现,司机,轿车,巴士,火车,驾驶,启动、行

15、驶、,等待乘客上车、启动、 行驶、到站停车、,正点发车、行驶、 到站停车、,如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同,/,方法重载的代码示例 1,方法重载并不陌生 java.io.PrintStream类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式,public class Test public static void main(String args) int i = 0; char c = z; String str = “hello“; System.out.println(i); System.out.println(c);

16、 System.out.println(str); ,PrintStream,println(int) println(char) println(String) ,方法名相同,参数类型不同,调用不同的println方法,方法重载,/,方法重载的代码示例 2,java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式 运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法,public class Test public static void main(String args) Math.max(1,2); Math.max(1.0F,

17、2.F); Math.max(1.0,2); ,方法重载,/,构造方法重载 2-1,构造方法重载是方法重载的典型示例,public class Teacher7 private String name; / 教员姓名 private String school = “北京中心“; / 所在中心public Teacher7(String name) this.name = name; /设定教员姓名 public Teacher7(String name, String school) this.name = name; /设定教员姓名 this.school = school; /设定教员的

18、所在中心 public String introduction() return “大家好!我是“ + school + “的“ + name ; ,构造方法重载,/,构造方法重载 2-2,通过调用不同的构造方法来表达对象的多种初始化行为 例如: 默认情况下,教师来自北京中心,初始化时,只需提供教员姓名 有时,需要提供所在中心名称及教员姓名,public class Teacher7Test public static void main(String args) Teacher7 teacher1 = new Teacher7(“李芳“); System.out.println(teache

19、r1.introduction();Teacher7 teacher2 = new Teacher7(“张欣“,“天津中心“); System.out.println(teacher2.introduction(); ,大家好!我是北京中心的李芳 大家好!我是天津中心的张欣,/,小结 4,编写一个类Book3,代表教材: 具有属性:名称(title)、页数(pageNum)、种类(type) 具有方法:detail,用来在控制台输出每本教材的名称、页数、种类 具有两个带参构造方法:第一个构造方法中,设置教材种类为“计算机”(固定),其余属性的值由参数给定;第二个构造方法中,所有属性的值都由参数

20、给定 编写测试类Book3Test进行测试: 分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确,/,给定如下Java 代码,请指出 代码中的错误 ,并解释原因。,public class Sample private int x; public Sample() x = 1; public Sample(int i) x = i; public int Sample(int i) x = i; return x+; private Sample(int i, String s)public Sample(String s,int i)private Sampla(int i)x=i+; private void Sampla(int i)x=i+; ,总结,无参构造方法,带参构造方法,不是构造方法,带参构造方法,带参构造方法,名称与类名不相同,不是构造方法,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报