JAVA为什么要使用封装及如何封装经典实例

 更新时间:2023年10月28日 10:17:12   作者:许思王  
这篇文章主要给大家介绍了关于JAVA为什么要使用封装及如何封装的相关资料,封装就是将属性私有化,提供公有的方法访问私有属性,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访问和修改。这是Java面向对象编程的三个基本特性之一,另外两个是继承和多态。在此之前我们已经学习过关于继承的概念,今天我们来学习有关封装的内容。

封装的含义

封装是面向对象编程的一种重要概念,是将数据和对数据的操作封装在一个类中,使得数据对外部的访问受到限制,只能通过类中的公共方法来访问或操作。封装的目的是隐藏类的实现细节,并且保护数据不被随意修改,从而增强了代码的安全性和可维护性。另外,封装也使得代码的扩展和修改更加方便,只需在类内部进行修改而不需要修改其他代码。

通过封装,可以提高类的安全性和可维护性,使得类的实现细节被隐藏,只暴露出有限的接口和功能给外部使用,从而减少了类之间的耦合性。同时,封装还可以实现数据隐藏和数据保护,提高程序的可靠性和可扩展性。

封装的优点如下:

  • 提高类的安全性:封装可以避免外部程序直接访问和修改类的内部数据,从而保证类的数据安全性和保密性。但是,需要注意的是,封装并不是万能的,有些攻击手段仍然可以突破封装的保护措施,因此需要综合使用多种安全技术来保护类的数据安全。
  • 提高代码的可读性:封装可以隐藏对象的实现细节,使得使用者只需要关心类的接口,而不需要知道类的实现细节。这样可以提高代码的可读性和可维护性。另外,封装还可以使代码更易于理解,因为使用者只需要关注类的公共方法,而不需要了解类的所有细节。
  • 提高代码的复用性:封装可以将类的接口和实现分离,使得类的实现可以独立于接口而变化。这样可以提高代码的复用性和可扩展性。例如,如果需要更改类的

四种访问控制符

Java中,采用访问控制符来控制类中数据成员和方法的访问权限,主要有四种访问控制符:public、private、protected和默认访问控制符(即不写访问控制符)。

  • public:表示该数据成员或方法可以被其他任何类访问。
  • private:表示该数据成员或方法只能在当前类内部访问。
  • protected:表示该数据成员或方法可以在当前类和其子类中访问。
  • 默认访问控制符:表示该数据成员或方法只能在同一个包内的其他类中访问。

封装的两种经典实例

银行账户类

该类的主要属性包括账户名、账号、账户余额等。其中账户余额是一个私有属性,外部无法直接访问。类中提供了一系列操作账户的方法,例如存款、取款、查询余额等。这些方法都能够在保证账户余额正确的情况下,修改账户余额。

public class BankAccount {
    private String accountNumber;
    private double balance;

    public BankAccount(String accountNumber, double balance) {
        this.accountNumber = accountNumber;
        this.balance = balance;
    }

    public String getAccountNumber() {
        return accountNumber;
    }

    public double getBalance() {
        return balance;
    }

    public void deposit(double amount) {
        balance += amount;
    }

    public void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
        } else {
            System.out.println("Insufficient balance.");
        }
    }
}

  • accountNumber: 表示账户号码的字符串。
  • balance: 表示账户余额的双精度浮点数。
  • BankAccount(String accountNumber, double balance): 构造函数,用于创建一个新的银行账户对象。
  • getAccountNumber(): 返回账户号码的方法。
  • getBalance(): 返回账户余额的方法。
  • deposit(double amount): 存款方法,用于向账户中添加资金。
  • withdraw(double amount): 取款方法,用于从账户中扣除资金。如果账户余额不足,将输出一条错误信息。

学生类

public class Student {
    // 属性
    private String name;
    private int age;
    private String gender;
    private String id;

    // 构造方法
    public Student(String name, int age, String gender, String id) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.id = id;
    }

    // 方法
    public void study() {
        System.out.println("学生正在学习");
    }

    public void showInfo() {
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("性别:" + gender);
        System.out.println("学号:" + id);
    }

    // Getter和Setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

  • 属性:学生类具有姓名、年龄、性别和学号这些属性。
  • 构造方法:学生类具有一个带四个参数的构造方法,用于初始化学生对象。
  • 方法:学生类具有学习方法和展示学生信息的方法。
  • Getter和Setter方法:学生类具有获取和设置属性值的Getter和Setter方法,用于保护属性的私有性。

总结 

到此这篇关于JAVA为什么要使用封装及如何封装的文章就介绍到这了,更多相关JAVA使用封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Flink流处理引擎零基础速通之数据的抽取篇

    Flink流处理引擎零基础速通之数据的抽取篇

    今天不分享基础概念知识了,来分享一个马上工作需要的场景,要做数据的抽取,不用kettle,想用flink。实际就是flink的sql、table层级的api
    2022-05-05
  • java递归处理单位人员组织机构树方式

    java递归处理单位人员组织机构树方式

    这篇文章主要介绍了java递归处理单位人员组织机构树方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 使用log4j MDC实现日志追踪

    使用log4j MDC实现日志追踪

    这篇文章主要介绍了使用log4j MDC实现日志追踪方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 解决SpringBoot 测试类无法自动注入@Autowired的问题

    解决SpringBoot 测试类无法自动注入@Autowired的问题

    这篇文章主要介绍了解决SpringBoot 测试类无法自动注入@Autowired的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)

    Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)

    MyBatis-Plus是MyBatis的增强工具,本文主要介绍了Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL),具有一定的参考价值,感兴趣的可以了解一下
    2021-07-07
  • java实现简易扑克牌游戏

    java实现简易扑克牌游戏

    这篇文章主要为大家详细介绍了java实现简易扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Java打乱数组元素简单代码例子

    Java打乱数组元素简单代码例子

    在Java编程中,我们经常需要对数组进行乱序操作(即将数组中的元素随机打乱顺序),这篇文章主要给大家介绍了关于Java打乱数组元素的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 详解SpringCloud微服务架构之Hystrix断路器

    详解SpringCloud微服务架构之Hystrix断路器

    本篇文章主要介绍了详解SpringCloud微服务架构之Hystrix断路器,Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互,有兴趣的可以了解一下
    2018-01-01
  • spring boot中配置hikari连接池属性方式

    spring boot中配置hikari连接池属性方式

    这篇文章主要介绍了spring boot中配置hikari连接池属性方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • springboot jackson配置教程

    springboot jackson配置教程

    这篇文章主要介绍了springboot jackson配置教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论