Java基础笔记28——封装
封装
隐藏属性:方法或实现细节的过程称为封装
特点:
1.构造器与类一般使用public修饰
2.属性一般使用private修饰,对外提供访问器访问属性
好处:
1.隐藏类的实现细节
2.让使用者只通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
3.可进行数据检查
修饰类:public <default>
修饰变量、方法:public protected <default> private
public: 同类、同包、不同包子类、不同包
protected:同类、同包、不同包子类
<default>:同类、同包
private: 同类
e.g.
ClassOne.java:
package com.lqh.chapter02;
public class ClassOne {
private char var = 'a';
protected char getVar() {
return var;
}
char getVar2() {
return var;
}
}
ClassTest.java:
package com.lqh.chapter03;
import com.lqh.chapter02.ClassOne;
public class ClassTest extends ClassOne{
public static void main(String[] args) {
ClassTest test = new ClassTest();
char var = test.getVar();
char var2 = new ClassOne().getVar2();
}
}
以上程序是否能够编译成功?
(1)因为getVar方法被protected修饰,且test对象再不同包中的子类中,所以test.getVar()能够正常运行
(2)因为getVar2方法被default修饰,且new ClassOne()匿名对象不在同一个包中,所以new ClassOne().getVar2()不能正常运行
例子:
package com.lqh.chapter02; public class _26fengzhuang { public static void main(String[] args) { Employee lqh = new Employee(); /* * 属性已被private修饰,不允许类以外的人访问 lqh.empno = 212; lqh.ename = "lqh"; lqh.salary = * 4500.5; */ // 调用set方法赋值 lqh.setEmpno(212); lqh.setEname(""); lqh.setSalary(2595); //调用get方法取值 System.out.println(lqh.getEmpno()); System.out.println(lqh.getEname()); System.out.println(lqh.getSalary()); } } class Employee { private int empno;// 员工编号 private String ename;// 员工姓名 private double salary;// 员工工资 // 访问器(get与set) public int getEmpno() { // 1.隐藏类的实现细节 return this.empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return this.ename; } public void setEname(String ename) { //3.可进行数据检查 if(ename == null || "".equals(ename)) { System.out.println("员工姓名不能为空!"); return; } this.ename = ename; } public double getSalary() { return this.salary; } public void setSalary(double salary) { //2.可以方便地加入控制逻辑,限制对属性的不合理操作 if (salary < 2600) { System.out.println("薪资不能少于2600"); return; } this.salary = salary; } }
输出结果为:
员工姓名不能为空!
薪资不能少于2600
212
null
0.0