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
- 提高了系统的可维护性。