文章目录本专栏为 JavaSE 的学习笔记及相关项目,专栏长期免费更新 ❤️ ❤️ ❤️
❤️ 个人主页:Nezuko627 欢迎来访~~~
⭐️往期回顾:
- 【JavaSE】深入浅出悟透递归
- 【JavaSE】Java中的可变参数
- 1 封装的基本介绍
- 2 如何实现封装?
- 3 封装练习
- 4 封装与构造器
- 写在最后
1 封装的基本介绍
✈️ 封装(encapsulation) 是 指把抽象的数据【属性】和对数据的 *** 作【方法】封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的 *** 作【方法】,才能对数据进行 *** 作。
比如,我们日常生活中使用空调,我们似乎并不关心遥控器与空调是如何进行数据传输的,我们只是通过遥控器提供的按钮(功能)来实现对空调的控制而已。封装不仅可以帮助隐藏实现细节,还可以帮助我们对数据进行验证,保证安全合理。
2 如何实现封装?
🍑 封装的实现步骤分为以下三步:
- ⭐️ 将属性进行私有化,使用
private
修饰; - ⭐️ 提供一个
public
修饰的公共set
方法,用于对属性判断并赋值:
public void setXxx(datatype dataname){
// 数据验证逻辑
属性 = 参数名;
}
- ⭐️ 提供一个
public
修饰的公共get
方法,用于获取属性的值:
public datatype getXxx(){
return Xxx;
}
🍎 总的来说,封装就像一个产品,用户并不关心产品是如何制作出来的,我们只需要向用户提供产品说明书即可。(封装 + 外部用于访问的公共方法)
3 封装练习
🍑 好了,伙伴们,现在一定都对封装有了一定的了解了吧?我们来看一个案例:
请你设计一个程序,要求如下:
- 不能随意查看人的年龄,工资等隐私信息;
- 检验年龄是否合理,如果处于 1 ~ 120 则设置,如果处于别的年龄,则设置为默认值;
- 限制名字的长度在2 ~ 8个字符。
🍑 显然,我们需要对用户的属性进行封装,并通过公共方法实现题目的要求:数据检验与设置,参考代码如下:
class Person{
public String name; // 名字可以公开
private int age; // 年龄不公开
private double salary; // 工资不公开
// set 方法
public void setName(String name) {
// 数据校验
if(name.length() >= 2 && name.length() <= 8){
this.name = name;
}else {
System.out.println("姓名长度不符合要求!");
}
}
public void setAge(int age) {
// 判断
if(age >= 1 && age <= 120){
this.age = age;
}else {
System.out.println("年龄范围不符要求!");
this.age = 0; // 设置默认值
}
}
public void setSalary(double salary) {
this.salary = salary;
}
// get 方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
// 方便测试 设置打印信息的方法
public void printMessage(){
System.out.println("姓名:" + this.name);
System.out.println("年龄:" + this.age);
System.out.println("薪水:" + this.salary);
}
}
public class Test1 {
public static void main(String[] args) {
Person person = new Person();
person.setName("Nezuko");
person.setAge(20);
person.setSalary(2000);
// 打印信息
person.printMessage();
}
}
🍎 测试结果:
4 封装与构造器
😗 为了便于我们实际的使用,即对姓名、年龄、薪水进行一次性的赋值,我们可以设置构造器,即在 Person 类加入如下代码:
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
但是细心的小伙伴就发现了,如果这样写构造器的话,那通过构造器对属性进行赋值相当于 越过了数据检验, 比如 120岁以上的年龄也可以赋值给 age。
怎么解决呢?
很简单!我们只需要在构造器中调用已经写好数据检验的 set 方法即可!
🍑 构造器修改如下:
public Person(String name, int age, double salary) {
setName(name);
setAge(age);
setSalary(salary);
}
写在最后
🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞,非常感谢 ❤️ ❤️!
如果有问题,欢迎私信或者评论区!
共勉:“其实一直陪伴你的,是那个了不起的自己。”
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)