在学习封装之前,我们先来看一个案例

通过上面的案例我们可以发现,在创建对象时任何的年龄值都可以被赋到age中,但是用户可能会输入不合理的值,这时候就不合理,这种情况应该在赋值之前就被判断处理,这时候我们之前学过的知识点就做不到了,要用封装才可以。
面向对象三大特征之一一封装
封装的概念:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的两大原则:
把所有的属性藏起来,把尽可能多的东西藏起来,对外提供便捷的接口
如何实现封装:
(1)修改属性的可见性,设为private,防止错误的修改
(2)创建公有的getter和setter方法,用于属性的读写
(3)在getter和setter方法中加入属性控制语句,对属性值的合法性进行判断
package com.oop.day07;
/**
* @author LX
* @create 2022-10-21 11:14
* 封装:如何实现封装
* (1)修改属性的可见性,设为private,防止错误的修改
* (2)创建公有的getter和setter方法,用于属性的读写
* (3)在getter和setter方法中加入属性控制语句,对属性值的合法性进行判断
*/
public class Student1 {
private String name;//姓名
private int age;//年龄
//无参构造方法
public Student1(){}
//全参构造方法
public Student1(String name,int age){
this.name=name;
this.age=age;
}
//getter和setter方法
//setter方法用来写入属性值,在该方法中可以对该值进行判断
public void setName(String name){
this.name=name;
}
//getter方法用来获取属性值
public String getName(){
return name;
}
public void setAge(int age){ //在setter中对年龄值进行判断,避免不合理的值进入
if(age<0 || age>120){
System.out.println("年龄值必须在0-120之间");
this.age=1;
}else{
this.age=age;
}
}
public int getAge(){
return age;
}
public static void main(String[] args) {
//调用无参的构造方法
Student1 stu1=new Student1();
//调用全参的构造方法
Student1 stu2=new Student1("周润发",20);
System.out.println("大家好,我叫"+stu2.getName()+",年龄"+stu2.getAge());
//不合理的值也会通过构造方法进入
Student1 stu3=new Student1("周润发",-20);
System.out.println("大家好,我叫"+stu3.getName()+",年龄"+stu3.getAge());
//这时候就可以通过setter方法来进行赋值,对值进行合理判断
Student1 stu4=new Student1();
stu4.setName("刘德华");
stu4.setAge(-20);
System.out.println("大家好,我叫"+stu4.getName()+",年龄"+stu4.getAge());
//注意:创建对象是通过构造方法是对属性赋初始值,但是在改变属性值或者需要对值进行判断时,
//就需要通过setter方法来进行赋值
stu4.setAge(21);
System.out.println("大家好,我叫"+stu4.getName()+",年龄"+stu4.getAge());
}
}
1009

被折叠的 条评论
为什么被折叠?



