类的封装性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大家好!我是李芳,我今年10岁 大家好!我是李芳,我今年10岁 10 要满足教员的最小年龄要求, 要满足教员的最小年龄要求,可以通过对属性的封装来实现
7
什么是封装
封装,就是隐藏实现细节
将属性私有化,提供公有方法访问私有属性 通过这些公有方法访问私有属性
public class AccpTeacher2 { private String name; // 教员姓名 // 返回教员姓名 public String getName() { return name; } // 设定教员姓名 public void setName(String name) { this.name = name; } } this代表当前类的实例 代表当前类的实例 通过setter、getter方法 、 通过 方法 AccpTeacher2 teacher = new AccpTeacher2(); 访问name属性 访问 属性 teacher.setName ("李芳 李芳"); 李芳 String tName = teacher.getName();
请举例说明类与对象的区别与联系。 请举例说明类与对象的区别与联系。
2
预习检查
举例说明什么是方法重载? 举例说明什么是方法重载? Java中的构造方法与实例方法,有什么 中的构造方法与实例方法, 中的构造方法与实例方法 区别? 区别?
3
本章任务
升级HelloACCP,输出ACCP5.0教员的 自我介绍:
对属性进行封装 用构造方法实现对象成员的初始化 对构造方法进行重载
4
本章目标
理解封装的概念 掌握private关键字 掌握构造方法 掌握方法重载
5
为什么需要封装 2-1
编写一个类,代表ACCP5.0教员,要求:
具有属性:姓名、年龄 具有行为:自我介绍 ACCP5.0教员的最小年龄要求:22岁
public class AccpTeacher1{ public String name; // 教员姓名 public int age; //年龄 年龄 /** * 返回自我介绍的内容 */ public String introduction() { return "大家好!我是 + name + ",我今年 age+"岁"; 大家好! 大家好 我是" ,我今年"+ 岁 } }
错误!最小年龄应为 岁 错误!最小年龄应为22岁! 大家好!我是李芳,我今年22岁 大家好!我是李芳,我今年 岁
使用封装,增加了数据访问限制, 使用封装,增加了数据访问限制,增强了程序的可维护性10
小结 1
使用private关键字修饰某个成员变量后, 这个成员变量可以被同一包中的其它类 访问吗? 在Java程序中,代码封装带给我们的好 处是什么?
第3章 章 类的封装性
相关课程回顾
请指出下列Java代码中存在的错误,并改正。 请指出下列 代码中存在的错误,并改正。 代码中存在的错误
public class Test { public static void main(String[ ] args) { for(int i=0;i<10;i++){ 超出了变量i 超出了变量 System.out.println(i); 的访问范围 } System.out.println(i==10); } }
}
9
如何实现封装2-2
测试类通过调用setter方法,为对象的各个 属性赋值
public class AccpTeacher3Test { public static void main(String[ ] args) { AccpTeacher3 teacher = new AccpTeacher3(); teacher.setName ("李芳 李芳"); 李芳 teacher.setAge(10); System.out.println(teacher.introduction()); } }
8
如何实现封装2-1
封装的实现:
1、修改属性的可见性来限制对属性的访问 2、为每个属性创建一对赋值(setter)方法和取值(getter) 方 法,用于对这些属性的访问 3、在setter和getter方法中,加入对属性的存取限制
public class AccpTeacher3 { // 教员姓名 1 private String name; //年龄 private int age; 年龄
2 3
public int getAge() { return age; } public void setAge(int age) { if (age<22) { System.out.println("错误!最小年龄应为 岁!"); 错误! 错误 最小年龄应为22岁 this.age = 22; //如果不符合年龄要求,则赋予默认值 如果不符合年龄要求, 如果不符合年龄要求 } else { this.age = age; } } //此处省略对 此处省略对name属性的 属性的setter、getter方法 此处省略对 属性的 、 方法
13
wk.baidu.com
为什么需要构造方法 2-2
编写一个测试类,要求: 编写一个测试类,要求:
实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍
public class AccpTeacher4Test { AccpTeacher4中有 中有 public static void main(String[ ] args) { 太多的属性及对应的 AccpTeacher4 teacher = new setter方法,在初始 方法, 方法 AccpTeacher4(); 化时, 化时,很容易就忘记 teacher.setName("李芳 李芳"); 李芳 了,有没有可能简化 teacher.setAge(23); 对象初始化的代码? 对象初始化的代码? teacher.setEducation("本科 本科"); 本科 System.out.println(teacher.introduction()); } }
6
为什么需要封装 2-2
编写一个测试类,要求:
实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍
public class AccpTeacher1Test { public static void main(String[ ] args) { AccpTeacher1 teacher = new AccpTeacher1(); teacher.name = "李芳 李芳"; 李芳 teacher.age =10; System.out.println(teacher.introduction()); } }
编写测试类BookTest进行测试:为Book对象 的属性赋予初始值,并调用Book对象的detail 方法,看看输出是否正确
完整代码实现
12
为什么需要构造方法 2-1
开发ACCP5.0教员类AccpTeacher4,要求:
public class AccpTeacher4 { 具有属性:姓名、年龄、学历、职位 private String name; // 姓名 private int age; // 年龄 具有行为:自我介绍 private String education; // 学历 private String position; // 职位 public String introduction() { return "大家好!我是 + name + ",我今年” + age + "岁,学历“ 大家好! 大家好 我是" ,我今年” 岁 学历“ +education+",目前职位是"+position; ,目前职位是 } public String getName() { return name; } public void setName(String myName) { name = myName; } // 以下是其他属性的 以下是其他属性的setter、getter方法,此处省略 方法, 、 方法 }
17
小结 3
编写一个类Book2,代表教材:
具有属性:名称( )、页数 ),其 具有属性:名称(title)、页数(pageNum),其 )、页数( ), 中页数不能少于200页,否则输出错误信息,并赋予 中页数不能少于 页 否则输出错误信息, 默认值200 默认值 具有方法: 具有方法: detail,用来在控制台输出每本教材的名 , 称和页数。 称和页数。 具有带参数的构造方法: 具有带参数的构造方法:用来完成对象的初始化工 作,并在构造方法中完成对页数的最小值限制
1、方法名与类名相同 public class AccpTeacher5 { 2、没有返回类型 private String name; // 教员姓名
// 构造方法 public AccpTeacher5() { name = "无名氏 无名氏"; 无名氏 } }
使用new关键字调用构造方法
public class AccpTeacher5Test { public static void main(String[ ] args) { AccpTeacher5 teacher = new AccpTeacher5(); } }
带参数的构造方法 2-2
通过调用带参数的构造方法,简化对象初 始化的代码
public class AccpTeacher6Test { public static void main(String[] args) { AccpTeacher6 teacher = new AccpTeacher6(“李芳”,23, "本科 "咨询师 李芳” 本科", 咨询师 咨询师"); 李芳 本科 System.out.println(teacher.introduction()); } 创建对象时, 创建对象时,一并完 } 成了对象成员的初始 化工作 大家好!我是李芳 我今年 我今年23岁 学历本科, 大家好!我是李芳,我今年 岁,学历本科,目前职位是咨询师
15
带参数的构造方法 2-1
通过带参数的构造方法,显式地为实例变量赋予初始值
public class AccpTeacher6 { private String name; // 教员姓名 private int age; // 年龄 private String education; // 学历 private String position; // 职位 // 带参数的构造方法 public AccpTeacher6(String pName,int pAge,String pEducation,String pPosition) { name = pName; age = pAge; // 可以增加对 可以增加对age等属性的存取限制条件 等属性的存取限制条件 education = pEducation; position = pPosition; } public String introduction() { return "大家好!我是 + name + ",我今年 + age + "岁,学历 + 大家好! 大家好 我是" ,我今年" 岁 学历" education + ",目前职位是"+position; ,目前职位是 } } 16
11
小结 2
请通过代码封装,实现如下需求:
编写一个类Book,代表教材:
具有属性:名称( )、页数 ),其中 具有属性:名称(title)、页数(pageNum),其中 )、页数( ), 页数不能少于200页,否则输出错误信息,并赋予默认 页数不能少于 页 否则输出错误信息, 值200 为各属性设置赋值和取值方法 具有方法:detail,用来在控制台输出每本教材的名称和 具有方法 , 页数
大家好!我是李芳 我今年 我今年23岁 学历本科,目前职位是null 大家好!我是李芳,我今年 岁,学历本科,目前职位是
要简化对象初始化的代码, 要简化对象初始化的代码,可以通过构造方法来解决
14
什么是构造方法
构造方法负责对象成员的初始化工作,为 实例变量赋予合适的初始值 构造方法必须满足以下语法规则:
7
什么是封装
封装,就是隐藏实现细节
将属性私有化,提供公有方法访问私有属性 通过这些公有方法访问私有属性
public class AccpTeacher2 { private String name; // 教员姓名 // 返回教员姓名 public String getName() { return name; } // 设定教员姓名 public void setName(String name) { this.name = name; } } this代表当前类的实例 代表当前类的实例 通过setter、getter方法 、 通过 方法 AccpTeacher2 teacher = new AccpTeacher2(); 访问name属性 访问 属性 teacher.setName ("李芳 李芳"); 李芳 String tName = teacher.getName();
请举例说明类与对象的区别与联系。 请举例说明类与对象的区别与联系。
2
预习检查
举例说明什么是方法重载? 举例说明什么是方法重载? Java中的构造方法与实例方法,有什么 中的构造方法与实例方法, 中的构造方法与实例方法 区别? 区别?
3
本章任务
升级HelloACCP,输出ACCP5.0教员的 自我介绍:
对属性进行封装 用构造方法实现对象成员的初始化 对构造方法进行重载
4
本章目标
理解封装的概念 掌握private关键字 掌握构造方法 掌握方法重载
5
为什么需要封装 2-1
编写一个类,代表ACCP5.0教员,要求:
具有属性:姓名、年龄 具有行为:自我介绍 ACCP5.0教员的最小年龄要求:22岁
public class AccpTeacher1{ public String name; // 教员姓名 public int age; //年龄 年龄 /** * 返回自我介绍的内容 */ public String introduction() { return "大家好!我是 + name + ",我今年 age+"岁"; 大家好! 大家好 我是" ,我今年"+ 岁 } }
错误!最小年龄应为 岁 错误!最小年龄应为22岁! 大家好!我是李芳,我今年22岁 大家好!我是李芳,我今年 岁
使用封装,增加了数据访问限制, 使用封装,增加了数据访问限制,增强了程序的可维护性10
小结 1
使用private关键字修饰某个成员变量后, 这个成员变量可以被同一包中的其它类 访问吗? 在Java程序中,代码封装带给我们的好 处是什么?
第3章 章 类的封装性
相关课程回顾
请指出下列Java代码中存在的错误,并改正。 请指出下列 代码中存在的错误,并改正。 代码中存在的错误
public class Test { public static void main(String[ ] args) { for(int i=0;i<10;i++){ 超出了变量i 超出了变量 System.out.println(i); 的访问范围 } System.out.println(i==10); } }
}
9
如何实现封装2-2
测试类通过调用setter方法,为对象的各个 属性赋值
public class AccpTeacher3Test { public static void main(String[ ] args) { AccpTeacher3 teacher = new AccpTeacher3(); teacher.setName ("李芳 李芳"); 李芳 teacher.setAge(10); System.out.println(teacher.introduction()); } }
8
如何实现封装2-1
封装的实现:
1、修改属性的可见性来限制对属性的访问 2、为每个属性创建一对赋值(setter)方法和取值(getter) 方 法,用于对这些属性的访问 3、在setter和getter方法中,加入对属性的存取限制
public class AccpTeacher3 { // 教员姓名 1 private String name; //年龄 private int age; 年龄
2 3
public int getAge() { return age; } public void setAge(int age) { if (age<22) { System.out.println("错误!最小年龄应为 岁!"); 错误! 错误 最小年龄应为22岁 this.age = 22; //如果不符合年龄要求,则赋予默认值 如果不符合年龄要求, 如果不符合年龄要求 } else { this.age = age; } } //此处省略对 此处省略对name属性的 属性的setter、getter方法 此处省略对 属性的 、 方法
13
wk.baidu.com
为什么需要构造方法 2-2
编写一个测试类,要求: 编写一个测试类,要求:
实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍
public class AccpTeacher4Test { AccpTeacher4中有 中有 public static void main(String[ ] args) { 太多的属性及对应的 AccpTeacher4 teacher = new setter方法,在初始 方法, 方法 AccpTeacher4(); 化时, 化时,很容易就忘记 teacher.setName("李芳 李芳"); 李芳 了,有没有可能简化 teacher.setAge(23); 对象初始化的代码? 对象初始化的代码? teacher.setEducation("本科 本科"); 本科 System.out.println(teacher.introduction()); } }
6
为什么需要封装 2-2
编写一个测试类,要求:
实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍
public class AccpTeacher1Test { public static void main(String[ ] args) { AccpTeacher1 teacher = new AccpTeacher1(); teacher.name = "李芳 李芳"; 李芳 teacher.age =10; System.out.println(teacher.introduction()); } }
编写测试类BookTest进行测试:为Book对象 的属性赋予初始值,并调用Book对象的detail 方法,看看输出是否正确
完整代码实现
12
为什么需要构造方法 2-1
开发ACCP5.0教员类AccpTeacher4,要求:
public class AccpTeacher4 { 具有属性:姓名、年龄、学历、职位 private String name; // 姓名 private int age; // 年龄 具有行为:自我介绍 private String education; // 学历 private String position; // 职位 public String introduction() { return "大家好!我是 + name + ",我今年” + age + "岁,学历“ 大家好! 大家好 我是" ,我今年” 岁 学历“ +education+",目前职位是"+position; ,目前职位是 } public String getName() { return name; } public void setName(String myName) { name = myName; } // 以下是其他属性的 以下是其他属性的setter、getter方法,此处省略 方法, 、 方法 }
17
小结 3
编写一个类Book2,代表教材:
具有属性:名称( )、页数 ),其 具有属性:名称(title)、页数(pageNum),其 )、页数( ), 中页数不能少于200页,否则输出错误信息,并赋予 中页数不能少于 页 否则输出错误信息, 默认值200 默认值 具有方法: 具有方法: detail,用来在控制台输出每本教材的名 , 称和页数。 称和页数。 具有带参数的构造方法: 具有带参数的构造方法:用来完成对象的初始化工 作,并在构造方法中完成对页数的最小值限制
1、方法名与类名相同 public class AccpTeacher5 { 2、没有返回类型 private String name; // 教员姓名
// 构造方法 public AccpTeacher5() { name = "无名氏 无名氏"; 无名氏 } }
使用new关键字调用构造方法
public class AccpTeacher5Test { public static void main(String[ ] args) { AccpTeacher5 teacher = new AccpTeacher5(); } }
带参数的构造方法 2-2
通过调用带参数的构造方法,简化对象初 始化的代码
public class AccpTeacher6Test { public static void main(String[] args) { AccpTeacher6 teacher = new AccpTeacher6(“李芳”,23, "本科 "咨询师 李芳” 本科", 咨询师 咨询师"); 李芳 本科 System.out.println(teacher.introduction()); } 创建对象时, 创建对象时,一并完 } 成了对象成员的初始 化工作 大家好!我是李芳 我今年 我今年23岁 学历本科, 大家好!我是李芳,我今年 岁,学历本科,目前职位是咨询师
15
带参数的构造方法 2-1
通过带参数的构造方法,显式地为实例变量赋予初始值
public class AccpTeacher6 { private String name; // 教员姓名 private int age; // 年龄 private String education; // 学历 private String position; // 职位 // 带参数的构造方法 public AccpTeacher6(String pName,int pAge,String pEducation,String pPosition) { name = pName; age = pAge; // 可以增加对 可以增加对age等属性的存取限制条件 等属性的存取限制条件 education = pEducation; position = pPosition; } public String introduction() { return "大家好!我是 + name + ",我今年 + age + "岁,学历 + 大家好! 大家好 我是" ,我今年" 岁 学历" education + ",目前职位是"+position; ,目前职位是 } } 16
11
小结 2
请通过代码封装,实现如下需求:
编写一个类Book,代表教材:
具有属性:名称( )、页数 ),其中 具有属性:名称(title)、页数(pageNum),其中 )、页数( ), 页数不能少于200页,否则输出错误信息,并赋予默认 页数不能少于 页 否则输出错误信息, 值200 为各属性设置赋值和取值方法 具有方法:detail,用来在控制台输出每本教材的名称和 具有方法 , 页数
大家好!我是李芳 我今年 我今年23岁 学历本科,目前职位是null 大家好!我是李芳,我今年 岁,学历本科,目前职位是
要简化对象初始化的代码, 要简化对象初始化的代码,可以通过构造方法来解决
14
什么是构造方法
构造方法负责对象成员的初始化工作,为 实例变量赋予合适的初始值 构造方法必须满足以下语法规则: