【学习笔记】封装
封装两字就如其字面含义,把一个东西装起来,装到一个箱子里面,只留一个口,让别人去拿到它。
比如我们看电视时,我们没有必要去了解它内部是怎么实现的,只需要去拿遥控器去换台,所以电视厂家就把内部复杂的细节封装起来,只给我们暴漏一些简单的接口:电源、遥控器。。。。。。
该露的露,该藏的藏
在我们程序中要追求“高内聚,低耦合” 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉; 低耦合:仅暴露少量方法给外部使用
封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏
在代码中这样表现:
我们先创建一个Student类,它有姓名、年龄等属性
之前我们在主程序中可以直接调用到这个类的属性即名字、年龄等,原因是这些属性的权限都是public
package com.oop.demo03;
public class Student {
public String name;
public int age;
}
package com.oop;
import com.oop.demo03.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.name = "zhangsan";
}
}
封装的意思就是把public 换成private(私有的),这是我们在直接去调用就会报错
这就是属性私有
把属性的权限换成private 之后,我们不能直接调用了,应该怎么办呢?
这时就用到了第二句话:get/set
我们在这个类中写一些get和set方法,把get/set方法的权限设置成public(公有的)以供主程序调用
package com.oop.demo03;
public class Student {
private String name;
public int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
package com.oop;
import com.oop.demo03.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
System.out.println(student.getName());
}
}
生成get/set方法 快捷键:alt + insert
封装的用处?
我们继续看上面的例子,如果用户调用setAge方法给这个对象的age设置值,设置了一个不合法的数值,比如:999、-1 等
我们就可以在setAge方法中进行合法性的校验,去规避掉用户的一些不合法输入。
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 120 || age <0 ){
this.age = 0;
}else{
this.age = age;
}
}
package com.oop;
import com.oop.demo03.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
System.out.println(student.getName());
student.setAge(99);
System.out.println("学生的年龄为:"+student.getAge());
}
}
总结 封装的意义
1.提高程序的安全性,保护数据
2.隐藏代码实现细节
3.统一接口
4.程序可维护性增加