在学习封装之前,我们先来看一个案例
通过上面的案例我们可以发现,在创建对象时任何的年龄值都可以被赋到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()); } }