1.概念
- 对一个类中的属性以及方法 实现“权限访问控制”
- “权限访问控制” 其他的类 以及对象能不能在代码调用
2.为什么要封装
- 提高了安全性
例如通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的 银行的密码需要保密,只能对该客户开发权限。
- 提高了复用性
将能实现某一特定功能的代码封装成一个独立的实体后,我们在可以在需要的时候调用,极大的提高了代码的复用性。
public class User{
public String name;
private String pwd;
protected int id;
private int age;
//用户类的构造方法 初始化成员属性
public User(String name,String pwd,int id,int age){
this.name = name;
this.pwd = pwd;
this.id = id;
this.age = age;
}
}
3.访问权限修饰符
- public
整个项目中都可以调用
- private
只能在当前类调用
- protected
同包下调用/子类下调用
- 缺省/不写
同包下调用
package com.tzh0402;
public class User {
public String name;
private String pwd;
protected int id;
private int age;
}
public class Manage {
public static void main(String[] args){
User user = new User();
user.name="admin";
user.pwd="admin123"; // pwd' 在 'com.tzh0402.User' 中具有 private 访问权限
user.age=-10; //age' 在 'com.tzh0402.User' 中具有 private 访问权限
user.id=1;
}
}
package com.tzh0403;
import com.tzh0402.User;
public class Test {
public static void main(String[] args){
User user = new User ();
user.name="张三";
user.pwd="123456";// pwd' 在 'com.tzh0402.User' 中具有 private 访问权限
user.id=1;// id' 在 'com.tzh0402.User' 中具有 protected 访问权限
user.age=18;//'age' 在 'com.tzh0402.User' 中不为 public。无法从外部软件包
//访问
}
}
4.setter/getter 配合 构造方法
简而言之,就是当用private去修饰一个变量的时候,我们可以用setter方法去设置该变量的值,用getter方法去调用该变量的值。
// pwd、age都是用private修饰的变量
public String getPwd(){
return pwd;
}
public void setPwd(String pwd){
// 将参数pwd 传给 私有的成员属性 this.pwd
// this 指代的是自己 也就是调用这个方法的对象自己
this.pwd = pwd;
}
// 传入 参数赋值
public void setAge(int age){
if(age<=0){
System.out.println ("年龄必须大于0");
return;// 结束方法不赋值
}
this.age = age;
}