Java 面向对象编程中的封装

封装是将数据(变量)和代码封装在一起作为一个单元的原则。它是四个面向对象编程的概念之一。其他三个是继承、多态和抽象。

什么是 Java 中的封装

要详细了解封装内容,请参考以下具有存款和查询余额方法的银行帐户类

class Account {
    private int account_number;
    private int account_balance;
    public void show Data() {
        //code to show data 
    }
    public void deposit(int a) {
        if (a < 0) {
            //show error 
        } else
            account_balance = account_balance + a;
    }
}

假设黑客设法访问你的银行帐户代码。现在,他尝试通过两种方式将金额-100 存入你的帐户。让我们看看他的第一种方法。

方法 1:他试图通过操纵代码将无效金额(比如-100)存入你的银行账户。

class Hacker {
	Account a = new Account();
	a.account_balance = -100;
}

问题是 - 这可能吗?让我们来看一下。

通常,类中的变量设置为 private,如下所示。它只能使用类中定义的方法访问。没有其他类或对象可以访问它们。

如果数据成员是私有的,则意味着它只能在同一个类中访问。没有外部类可以访问私有数据成员或其他类的变量。

因此,在我们的例子中,黑客无法向你的帐户存入-100 金额。

方法 2:黑客的第一种方法未能存入金额。接下来,他尝试使用 deposit 方法存入金额-100。

但是 deposit 方法中检查负值。所以第二种方法也失败了。

因此,你永远不会将你的数据暴露给外部方。这使你的应用程序安全。

整个代码可以被认为是一个封装,你只能通过消息进行通信。因此称之为封装。

Java 中的数据隐藏

通常,Java 封装被称为数据隐藏。但是,除了数据隐藏之外,封装概念还意味着更好地管理或分组相关数据。

要在 Java 中实现较低程度的封装,可以使用 protectedpublic 等修饰符。通过封装,开发人员可以轻松地更改代码的一部分而不会影响其他代码。

Java 中的 gettersetter 方法

如果数据成员被声明为 私有,则只能在同一个类中访问它。没有外部类可以访问该类的数据成员。如果需要访问这些变量,则必须使用公共 gettersetter 方法。

gettersetter 的方法用于创建、修改、删除和查看变量值。

以下代码是 gettersetter 方法的示例:

class Account{ 
private int account_number;
private int account_balance; 
    //getter method
    public int getBalance() {
        return this.account_balance;
    }
    //setter method
    public void setNumber(int num) {
        this.account_number = num;
    }
}

在上面的示例中,getBalance() 方法是读取变量 account_balance 的值的 getter 方法,setNumber() 方法是 setter 方法,用于设置或更新变量 account_number 的值。

抽象与封装

通常封装会被误解为抽象。我们来澄清下,

  • 封装更多的是关于 如何 实现功能
  • 抽象更多的是关于一个类可以做什么。

了解这种差异的一个简单例子是手机。将电路板中的复杂逻辑封装在触摸屏中,并提供接口以将其抽象出来。

Java 封装的优点

  • 封装将数据与其相关功能绑定在一起。这里的功能意味着 方法,数据意味着 变量
  • 所以我们将变量和方法保存在一个地方。那个地方是 。类是封装的基础。
  • 使用 Java 封装,你可以隐藏(限制访问)代码中的关键数据成员,从而提高安全性。
  • 正如我们前面所讨论的,如果数据成员被声明为 私有,那么它只能在同一个类中访问。没有外部类可以访问其他类的数据成员(变量)。
  • 但是,如果需要访问这些变量,则必须使用 publicgettersetter 方法。