【JavaSE】面向对象之封装

【JavaSE】面向对象之封装,第1张

本专栏为 JavaSE 的学习笔记及相关项目,专栏长期免费更新 ❤️ ❤️ ❤️

❤️ 个人主页:Nezuko627 欢迎来访~~~
⭐️往期回顾:

  • 【JavaSE】深入浅出悟透递归
  • 【JavaSE】Java中的可变参数

文章目录
  • 1 封装的基本介绍
  • 2 如何实现封装?
  • 3 封装练习
  • 4 封装与构造器
  • 写在最后


1 封装的基本介绍

✈️ 封装(encapsulation) 是 指把抽象的数据【属性】和对数据的 *** 作【方法】封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的 *** 作【方法】,才能对数据进行 *** 作。
比如,我们日常生活中使用空调,我们似乎并不关心遥控器与空调是如何进行数据传输的,我们只是通过遥控器提供的按钮(功能)来实现对空调的控制而已。封装不仅可以帮助隐藏实现细节,还可以帮助我们对数据进行验证,保证安全合理。


2 如何实现封装?

🍑 封装的实现步骤分为以下三步:

  1. ⭐️ 将属性进行私有化,使用 private 修饰;
  2. ⭐️ 提供一个 public 修饰的公共 set 方法,用于对属性判断并赋值:
public void setXxx(datatype dataname){
	// 数据验证逻辑
	属性 = 参数名;
}
  1. ⭐️ 提供一个 public 修饰的公共 get 方法,用于获取属性的值:
public datatype getXxx(){
	return Xxx;
}

🍎 总的来说,封装就像一个产品,用户并不关心产品是如何制作出来的,我们只需要向用户提供产品说明书即可。(封装 + 外部用于访问的公共方法)


3 封装练习

🍑 好了,伙伴们,现在一定都对封装有了一定的了解了吧?我们来看一个案例:

请你设计一个程序,要求如下:

  1. 不能随意查看人的年龄,工资等隐私信息;
  2. 检验年龄是否合理,如果处于 1 ~ 120 则设置,如果处于别的年龄,则设置为默认值;
  3. 限制名字的长度在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);
    }

写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞,非常感谢 ❤️ ❤️!

如果有问题,欢迎私信或者评论区!
共勉:“其实一直陪伴你的,是那个了不起的自己。”

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/730922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存