0808-Java OOP面向对象的Java实现 封装
来源:互联网 发布:淘宝手机端网址转化 编辑:程序博客网 时间:2024/06/04 18:53
封装就是将属性私有化,提供共有的方法访问私有属性。
做法:
(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
- 0808-Java OOP面向对象的Java实现 封装
- 面向对象 java oop
- Java面向对象oop
- java面向对象OOP
- Java面向对象(OOP)
- java面向对象的程序设计(oop)
- OOP----java面向对象理解
- 面向对象(OOP)---java
- java-oop-面向对象原则
- Java OOP--面向对象程序设计
- Java OOP 面向对象编程
- JAVA-OOP(面向对象)
- Java面向对象编程(OOP)
- 黑马程序员--03.Java面向对象--01.【OOP基本概念】【匿名对象】【封装】【构造函数】【this关键字】
- java 面向对象----封装
- [Java面向对象]封装
- JAVA面向对象-----封装
- Java 面向对象 : 封装
- CF798B:Mike and strings(Hash)
- 接入微信公众平台
- bzoj 1095(括号序列)
- ES命令
- Java虚拟机垃圾回收
- 0808-Java OOP面向对象的Java实现 封装
- 程序运行时间测试
- 测试粘包现象
- c++中cout能不能直接输出string
- python sorted【转】
- 制作视频_“平面的导演”
- 使用Docker搭建Nginx整数溢出漏洞(CVE-2017-7529)及Python PoC验证
- 【字符串入门专题1】 E
- 事件