面向对象三大特性01-封装详解
1. 封装(属性私有,get/set)
代码示例:
如上图Student类中,id属于私有属性,也就是不供外界调用.也就是属性前面加了关键字private,显然是会报错。
1.1 什么是封装?
- 该露的露,该藏的藏。设计程序讲究“高内聚,低耦合”, 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合:仅仅暴露少量的方法给外部使用。
- 封装,实际上可以理解为数据的隐藏。通常情况下,应该禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来进行访问,也就是所谓的信息隐藏。
1.2 为什么要封装?也就是等同于封装之后有啥好处呢?
代码示例:
如何通过公开的方法(也就是提供的接口方法)来对私有的属性进行调用?
package oop.Demon04;//类 private 私有public class Student { //属性私有 private String name; //名字 private int id; //id private char gender; //性别 //提供一些可以操作这个属性的方法 //提供一些public的get set 方法 //get 获取这个数据 public String getName() { return this.name; } //set 给这个数据设置相应的值 public void setName(String name) { this.name = name; }}
通过上面的代码,很显然能够看出通过公开的get/set接口方法,实现了对私有属性的访问。同时又没有暴露具体的细节。也就是你只管调用就行了,至于类里面的具体的代码实现,你是不知道的,只不过上面都是基于上帝视角而已。
==================================================================
当然,如何一键快速生成get/set方法呢?
*idea快捷键:alt+insert 经常会使用。
public int getId() { return id; }public void setId(int id) { this.id = id; }public char getGender() { return gender; }public void setGender(char gender) { this.gender = gender; }
===========================================================
代码示例:
ackage oop.Demon04;//类 private 私有public class Student { //属性私有 private String name; //名字 private int id; //id private char gender; //性别 private int age; //提供一些可以操作这个属性的方法 //提供一些public的get set 方法 //get 获取这个数据 public String getName() { return this.name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //set 给这个数据设置相应的值 public void setName(String name) { this.name = name; }}
我们知道年龄肯定不可能有999这么一说,显然上述是不合法的数据。如何在程序中规避这些不合法的输入呢?------>封装,由于我们封装过,可以在set里面做一些安全性的检查。也就是说我们可以通过一些内部的封装,来使程序变得安全。(我想这个思想就是封装的本质了)
例如:
public void setAge(int age) { if(age>120||age<0){ System.out.println("不合法的年龄"); }else { this.age = age; } }
显然通过上面的限制,在输入999的时候,程序就会显示不合法输出。
封装的好处?
- 提高安全性,保护数据
- 隐藏代码的实现细节,也就是做了调用者,类里面的代码细节是不清楚的。
- 统一接口,所有的方法都是get/set
- 提高了系统的可维护性。
创作打卡挑战赛
赢取流量/现金/CSDN周边激励大奖