封装
1.什么是封装?
我们程序设计要追求”高内聚,低耦合“。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合就是:仅暴露少量的方法给外部使用。封装(数据的隐藏):通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏。
2.怎么用封装?
在这会涉及到private的应用
封装大多数是对属性来说,对方法的使用比较少。咱们先来写一个students类,里面包含的属性和方法。
public class students {
//名字
private String name;
//学号
private int xuehao;
//成绩
private int chengji;
} //不难发现定义这些变量的时候,数据类型前面有了private,表示属性私有,无法在主程序中被直接调用。
主程序如下
public class demon1 {
public static void main(String[] args) {
students students = new students();
System.out.println(students.name); //当你这样编写主程序的时候,他的name会是爆红的,是不会成功运行的。
} //若你把上面程序中的private改成public他就可以正常运行,不会爆红。
}
也就是说,当一个类中的变量被private(私有),他就无法在主程序中直接被调用,那么咱们就需要其他的方法,进行赋值。
3.怎么对类中私有的变量进行操作?
此时就会有一个get/set,可以对这个属性来进行操作,也就是提供一些可以操作这个属性的方法。这个方法就是提供一些public的get/set 方法。
get: 获得这个数据set:给这个数据设置值。
咱么看一下这个类的代码
public class students {
//名字
private String name; //三个属性
//学号
private int xuehao;
//成绩
private int chengji;
public String getName(){ //getName函数,使得主程序可以调用这个方法,来获得这个类中的name的值
return this.name;
}
public void setName(String name){ //setName函数,使得主程序可以调用这个方法,来对类中的这个name进行赋值。
//在setName后面的括号中,String name 是形参,需要主程序中给他传一个实参。
this.name=name;
}
}
现在这个样子。就可以在主程序中对这个类中的变量进行修改了。咱们看一下主程序的代码
public class demon1 {
public static void main(String[] args) {
students students = new students(); //new一个对象,让students实例化
String name="Gao"; //在主程序中初始化一个name
String name2; //定义一个String 变量,用来接收类中的name.
students.setName(name); //调用类中的setName函数,给类中的name赋值
name2=students.getName(); //调用类中的getName函数,用来获取类中的name的值。
System.out.println(name2); //输出name2用来检验类中的name 是否发生改变。
}
}
=============================================
他的输出结果就是
Gao
4.怎么快捷生成get/set方法?
在类中,在定义好变量之后,按住alt+insert即可,就会出现很多选项,选择Getter and Setter即可。然后选择你想要创建的变量就行。
5.为什么要用封装?
大家看到这,可能会感觉为什么要用封装呢,封装岂不是多次一举,当不用封装的时候,普通调用的时候,输入任何值都是可以的,然后封装的话,可以在类中的get/set方法,添加很多细节,如输出和输出的东西进行一些要求,比如让你输入一个年龄的时候,在没有封装的情况下,输入任何数字都是可以的,在封装之后,可以在类中进行一些条件限制,比如要求输入年龄的范围,那咱们写一个代码看一下。
下面是类的代码
public class students {
//名字
private String name;
//学号
private int xuehao;
//成绩
private int chengji;
//年龄
private int age;
public int getAge() {
return age;
}
public void setAge(int age) { //可以对setName添加一些细节,对主程序中输入的年龄有限制。
if(age<110&&age>0){
this.age = age;
System.out.println("输入恰当");
}
else System.out.println("您输入的结果不符合实际要求");
}
}
下面是主程序的代码
public class demon1 {
public static void main(String[] args) {
students students = new students();
int age1=18;
int age2=128;
students.setAge(age1); //调用setName函数,并传一个实参。
students.setAge(age2);
}
}
============================================
他的最终输出结果是
输入恰当
您输入的结果不符合实际要求
6.封装的意义
提高代码的安全性,保护数据。隐藏代码的实现细节。统一接口。提高了系统的可维护性。