0808-Java OOP面向对象的Java实现 封装
2017-08-08 21:29
295 查看
什么是封装
封装就是将属性私有化,提供共有的方法访问私有属性。
做法:
(1)修改属性的可见性来限制对属性的访问.
(2)为每个属性创建一对取值get()方法和赋值set()方法,用于对这些属性的访问。
如下面示例所示:
****************************************
AccpTeacher2类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher2 {
03 private String name; // 教员姓名
04 private int age; // 教员年龄
05
06 public String getName() {
07 return name;
08 }
09
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public int getAge() {
15 return age;
16 }
17
18 public void setAge(int age) {
19 this.age = age;
20 }
21
22 /**
23 * 返回自我介绍的内容
24 */
25 public String introduction() {
26 return "大家好!我是" + name + ",我今年" + age + "岁。";
27 }
28 }
【注意】
this关键字的含义:在对象内部指代自身的引用。
因为this可以使你直接引用对象,你能用它来解决可能在实例变量和局部变量之间发生的任何同名
的冲突。如上面的代码中使用了this关键字,有效的解决了实例变量name与局部变量name之间发生
的同名冲突。
【提问】
使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?
【答案】
否。
上面的AccpTeacher2类中,使用了private关键字修饰属性,就意味着:除了AccpTeacher类本身,
其他所有类都不可以访问这些属性。但是,可以通过这些属性的取值get()方法、赋值set()方法
来访问这些属性。
****************************************
AccpTeacher2Test类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher2Test {
03 public static void main(String[] args) {
04 /* 对教员进行初始化 */
05 AccpTeacher2 teacher = new AccpTeacher2();
06 teacher.setName("李芳");
07 teacher.setAge(10); // 显然年龄不符合要求
08 /* 输出自我介绍的内容 */
09 System.out.println(teacher.introduction());
10 }
11 }
运行结果:
大家好!我是李芳,今年10岁。
【分析】
此时,运行结果仍然不符合ACCP5.0教员的最小年龄限制,但是,只要在上述代码的基础上稍加改造,
就可以达到目的了。
如何实现封装
实际做法很简单,只需要在上述代码的基础上改造,即赋值方法中加入对属性访问限制的代码,就能够
实现ACCP5.0教员的最小年龄要求限制。代码如下:
【例3】
****************************************
AccpTeacher3类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher3 {
03 private String name; // 教员姓名
04 private int age; // 教员年龄
05
06 public String getName() {
07 return name;
08 }
09
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public int getAge() {
15 return age;
16 }
17
18 public void setAge(int age) {
19 if (age < 22) {
20 System.out.println("错误!最小年龄应为22岁!");
21 this.age = 22;
22 } else {
23 this.age = age;
24 }
25 }
26
27 /**
28 * 返回自我介绍的内容
29 */
30 public String introduction() {
31 return "大家好!我是" + name + ",我今年" + age + "岁。";
32 }
33 }
在setAge()中,如果欲设置的年龄小于22岁,就打印错误信息,并把年龄设置为22岁。
现在,代码已满足了要求,测试类如下:
****************************************
AccpTeacher3Test类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher3Test {
03 public static void main(String[] args) {
04 /* 对教员进行初始化 */
05 AccpTeacher3 teacher = new AccpTeacher3();
06 teacher.setName("李芳");
07 teacher.setAge(10); // 显然年龄不符合要求
08 /* 输出自我介绍的内容 */
09 System.out.println(teacher.introduction());
10 }
11 }
运行结果:
错误!最小年龄应为22岁!
大家好!我是李芳,我今年22岁。
【分析】
显然,通过封装,实现了对属性的数据访问限制,满足了ACCP5.0教员类的需求。
另外,同前面的代码相比,上述的代码中更改了对年龄设置的实现,但是由于
取值方法和赋值方法隐藏了实现的变更,因此并不会影响读取或修改该属性的
类,避免了大规模的修改,程序的可维护性增强。以上即“代码封装的好处”。
【总结】
实现封装的步骤:
(1)修改属性的可见性来限制对属性的访问。
(2)为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
(3)在赋值和取值方法中,加入对属性的存取限制。
本文参考:https://tieba.baidu.com/p/989864909
封装就是将属性私有化,提供共有的方法访问私有属性。
做法:
(1)修改属性的可见性来限制对属性的访问.
(2)为每个属性创建一对取值get()方法和赋值set()方法,用于对这些属性的访问。
如下面示例所示:
****************************************
AccpTeacher2类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher2 {
03 private String name; // 教员姓名
04 private int age; // 教员年龄
05
06 public String getName() {
07 return name;
08 }
09
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public int getAge() {
15 return age;
16 }
17
18 public void setAge(int age) {
19 this.age = age;
20 }
21
22 /**
23 * 返回自我介绍的内容
24 */
25 public String introduction() {
26 return "大家好!我是" + name + ",我今年" + age + "岁。";
27 }
28 }
【注意】
this关键字的含义:在对象内部指代自身的引用。
因为this可以使你直接引用对象,你能用它来解决可能在实例变量和局部变量之间发生的任何同名
的冲突。如上面的代码中使用了this关键字,有效的解决了实例变量name与局部变量name之间发生
的同名冲突。
【提问】
使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?
【答案】
否。
上面的AccpTeacher2类中,使用了private关键字修饰属性,就意味着:除了AccpTeacher类本身,
其他所有类都不可以访问这些属性。但是,可以通过这些属性的取值get()方法、赋值set()方法
来访问这些属性。
****************************************
AccpTeacher2Test类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher2Test {
03 public static void main(String[] args) {
04 /* 对教员进行初始化 */
05 AccpTeacher2 teacher = new AccpTeacher2();
06 teacher.setName("李芳");
07 teacher.setAge(10); // 显然年龄不符合要求
08 /* 输出自我介绍的内容 */
09 System.out.println(teacher.introduction());
10 }
11 }
运行结果:
大家好!我是李芳,今年10岁。
【分析】
此时,运行结果仍然不符合ACCP5.0教员的最小年龄限制,但是,只要在上述代码的基础上稍加改造,
就可以达到目的了。
如何实现封装
实际做法很简单,只需要在上述代码的基础上改造,即赋值方法中加入对属性访问限制的代码,就能够
实现ACCP5.0教员的最小年龄要求限制。代码如下:
【例3】
****************************************
AccpTeacher3类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher3 {
03 private String name; // 教员姓名
04 private int age; // 教员年龄
05
06 public String getName() {
07 return name;
08 }
09
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public int getAge() {
15 return age;
16 }
17
18 public void setAge(int age) {
19 if (age < 22) {
20 System.out.println("错误!最小年龄应为22岁!");
21 this.age = 22;
22 } else {
23 this.age = age;
24 }
25 }
26
27 /**
28 * 返回自我介绍的内容
29 */
30 public String introduction() {
31 return "大家好!我是" + name + ",我今年" + age + "岁。";
32 }
33 }
在setAge()中,如果欲设置的年龄小于22岁,就打印错误信息,并把年龄设置为22岁。
现在,代码已满足了要求,测试类如下:
****************************************
AccpTeacher3Test类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher3Test {
03 public static void main(String[] args) {
04 /* 对教员进行初始化 */
05 AccpTeacher3 teacher = new AccpTeacher3();
06 teacher.setName("李芳");
07 teacher.setAge(10); // 显然年龄不符合要求
08 /* 输出自我介绍的内容 */
09 System.out.println(teacher.introduction());
10 }
11 }
运行结果:
错误!最小年龄应为22岁!
大家好!我是李芳,我今年22岁。
【分析】
显然,通过封装,实现了对属性的数据访问限制,满足了ACCP5.0教员类的需求。
另外,同前面的代码相比,上述的代码中更改了对年龄设置的实现,但是由于
取值方法和赋值方法隐藏了实现的变更,因此并不会影响读取或修改该属性的
类,避免了大规模的修改,程序的可维护性增强。以上即“代码封装的好处”。
【总结】
实现封装的步骤:
(1)修改属性的可见性来限制对属性的访问。
(2)为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
(3)在赋值和取值方法中,加入对属性的存取限制。
本文参考:https://tieba.baidu.com/p/989864909
相关文章推荐
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
- JAVA——(2)OOP面向对象、封装、继承、多态、this、构造方法
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
- 面像对像的Java实现——封装
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- 马士兵 Java 第5章(1) 分别使用面向对象和面向结构(数组)的设计方法来实现“数三退一”
- java 面向对象(类,属性 ,方法,包,封装、继承、多态)
- IP层的封装(Java的InetAddress类的C++实现)
- java 第十一讲 面向对象之封装二
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- 【转】C语言实现C++面向对象的封装、继承、多态机制
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- java 实现JSP页面上一页及下一页封装
- 第四章 面向对象的概念和Java实现(二)
- java中用句柄与封装基础类的方法实现C++中指针的部分效果
- javascript OOP:实现继承、多态与封装
- java 第九讲 面向对象之封装
- 第三章(面向对象的概念和Java实现1)