封装
示例代码
-
package experiment; public class Application { public static void main(String[] args) { Student s1 = new Student(); s1.name = ""; } }
-
package experiment; //类 private私有的与public对应 public class Student { //封装大多数时候是对于属性而言的 //属性私有 private String name; //名字 private int id; //学号 private char sex; //性别 //学习() 方法 //睡觉() 方法 //提供一些可以操作这个属性的方法! //提供一些public的get,set方法 //get 获得这个属性 // set 给这个属性赋值 }
-
在Application中继续用.name的话会标红:
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AYLUGfG-1632919318803)(D:\JAVA学习图片\java面向对象\18.png)]
属性私有,get,set
示例代码
package experiment;
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("amy");
System.out.println(s1.getName());
}
}
package experiment;
//类 private私有的与public对应
public class Student {
//封装大多数时候是对于属性而言的
//属性私有
private String name; //名字
private int id; //学号
private char sex; //性别
//学习() 方法
//睡觉() 方法
//提供一些可以操作这个属性的方法!
//提供一些public的get,set方法
//get 获得这个属性
public String getName(){
return this.name;
}
// set 给这个属性赋值
public void setName(String name){
this.name=name;
}
}
-
运行后
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sdfsiXWn-1632919318805)(D:\JAVA学习图片\java面向对象\19.png)]
-
发现amy被成功输出
快捷键
-
alt+insert
-
可以自动生成get set方法
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CmrMH9Qq-1632919318806)(D:\JAVA学习图片\java面向对象\20.png)]
封装的意义
例子
-
在之前的代码中加入年龄属性
-
package experiment; public class Application { public static void main(String[] args) { Student s1 = new Student(); s1.setName("amy"); System.out.println(s1.getName()); s1.setAge(999);//显然年龄不可能超过999所以这是不合法的 System.out.println(s1.getAge()); } }
-
package experiment; //类 private私有的与public对应 public class Student { //封装大多数时候是对于属性而言的 //属性私有 private String name; //名字 private int id; //学号 private int age;//年龄 private char sex; //性别 //学习() 方法 //睡觉() 方法 //提供一些可以操作这个属性的方法! //提供一些public的get,set方法 //get 获得这个属性 public String getName(){ return this.name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // set 给这个属性赋值 public void setName(String name){ this.name=name; } }
-
-
给年龄赋值为999,显然这是不合法的然而利用封装,利用set是可以规避掉的可以在setage中进行一个安全性的检测,如果age在合法区间,否则输出非法。
public class Application { public static void main(String[] args) { Student s1 = new Student(); s1.setName("amy"); System.out.println(s1.getName()); s1.setAge(999);//显然年龄不可能超过999所以这是不合法的 System.out.println(s1.getAge()); }}
package experiment;//类 private私有的与public对应public class Student { //封装大多数时候是对于属性而言的//属性私有 private String name; //名字 private int id; //学号 private int age;//年龄 private char sex; //性别 //学习() 方法 //睡觉() 方法 //提供一些可以操作这个属性的方法! //提供一些public的get,set方法 //get 获得这个属性 public String getName(){ return this.name; } public int getAge() { return age; } public void setAge(int age) { if (age>130||age<0){ this.age=0; }else{ this.age=age; } }/// // set 给这个属性赋值 public void setName(String name){ this.name=name; }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4nsjcHOL-1632919318808)(D:\JAVA学习图片\java面向对象\21.png)]
意义:类似与隐私