面向对象的编程语言,拥有你三大特性,分别是:封装,继承,多态。
封装:封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作访问
封装的好处:
1:提高了安全性
2:提高了复用性
3:隐藏了实现细节
在卖你想对象的过程中,我们通过”权限控制”对封装好的类加上权限,来限制外来者对类的操纵,借以达到保障类中数据和方法的安全性的目的。而这种权限,可以用来控制属性和方法的访问范围
访问权限修饰符
修饰符 | 同一个类 | 同一个包 | 子类 | 所有类 |
---|---|---|---|---|
public 公有的 | √ | √ | √ | √ |
protected 受保护的 | √ | √ | √ | |
default 默认的 | √ | √ | ||
private 私有的 | √ |
封装的步骤如下:
1:尽量让权限讲到最低,在类里要将属性前添加private修饰符,从而而提高安全性
2:在类中定义 getter和setter方法,在方法内设置取值范围
3:最后,在我们的main 函数里的对象,不能在直接调用属性了,只能通过getter和setter方法进行调用
案例代码:
/**
* @version 1.0
* @author: jiazhihao
* @date: 2021-05-06 11:47
*/
/*封装
三大特性: 封装 继承 多态
set 给属性赋值
get读取属性的值*/
public class Person {
//私有属性
private String name;
private String pwd;
private Integer age;
private String sex;
// 无参构造方法
public Person() {
}
;
//对应私有属性的get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person[name =" + name + " ,pwd=" + pwd + " ,age=" + age + ",sex=" + sex + "]";
}
}
封装:
public class Demo01 {
public static int add( int a,int b){
return a+b;
}
public static void main(String[] args) {
System.out.println(1+1);
System.out.println(1+2);
System.out.println(1+3);
System.out.println(1+4);
System.out.println(1+5);
System.out.println(1+6);
System.out.println(add(1,1));
System.out.println(add(1,2));
System.out.println(add(1,3));
}
}
上述案例:为了避免不断地+操作,把两数相加写入add方法中,后续直接调用add方法。把具体的操作流程统一管理在add方法中,该过程就是封装的一种集体表现形式
类的封装
public class Demo02 {
/**
* public 共有
* protected 受保护
* private 私有
*
* */
//把属性私有化
private String name;
private int age;
//对外提供属性的设置方法
public void setName(String name){
this.name = name;
}
//对外提供属性的访问方法
public String getName(){
return this.name;
}
}
封装需要注意的事项如下:
属性的访问权限尽量给的很小
对外单独提供访问方法
setName给属性赋值
getName读取属性的值
1:由于面向对象的封装性,我们尽量让权限降到最低,在类里要在属性前添加private修饰符,从而提高安全性
2:定义getter和setter方法,使得在main函数里的对象,不能在直接调用属性了,只能通过getter和setter方法进行调用,从而隐藏了实现细节