Java中的封装

Java中的封装是什么?

Java中的封装是一种将变量(数据)和方法(代码)包装成单个单元的机制。它是隐藏信息细节、保护对象的数据和行为的过程。它是四个重要的面向对象编程(OOP)概念之一。封装的类易于测试,因此也更适合单元测试。

如果视频无法访问,请点击此处

通过示例学习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金额。让我们看看他的第一种方法或途径。

方法一:他试图通过操纵代码向您的银行账户存入无效金额(例如-100)。

Encapsulation in Java

那么,问题来了——这可能吗?让我们来调查一下。通常,类中的变量会设置为“private”,如下所示。它们只能通过类中定义的方法访问。任何其他类或对象都无法访问它们。

Encapsulation in Java

如果数据成员是私有的,这意味着它只能在同一类中访问。外部类无法访问私有数据成员或其他类的变量。所以,在我们的例子中,黑客无法向您的账户存入-100金额。

Encapsulation in Java

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

Encapsulation in Java

但是方法实现中有对负值的检查。所以第二种方法也失败了。

Encapsulation in Java

这样,您就永远不会将数据暴露给外部方。这使得您的应用程序更安全。

Encapsulation in Java

整个代码可以看作一个胶囊,您只能通过消息进行通信。因此得名封装。

Java中的数据隐藏

Java中的数据隐藏是指隐藏类的变量不被其他类访问。它只能通过其当前类的方法来访问。它隐藏了用户实现细节。但它不仅仅是为了数据隐藏,更是为了更好地管理或组合相关数据。要实现较低程度的Java封装,可以使用“protected”或“public”等修饰符。通过封装,开发人员可以轻松地更改代码的一部分,而不会影响其他部分。

Java中的Getter和Setter

Java中的Getter和Setter是用于检索和更新变量值的两个常规方法。它们主要用于创建、修改、删除和查看变量值。setter方法用于更新值,getter方法用于读取或检索值。它们也称为访问器和修改器。

以下代码是getter和setter方法的示例

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()方法是getter方法,用于读取account_balance变量的值;setNumber()方法是setter方法,用于为account_number变量设置或更新值。

抽象与封装

通常,封装与抽象混淆。让我们来学习一下:

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

一个理解这种区别的简单例子是手机。电路板中的复杂逻辑被封装在触摸屏中,并通过界面对其进行抽象。

Java中封装的优点

  • 封装是将数据与其相关功能绑定在一起。这里的功能是指“方法”,数据是指“变量”。
  • 所以我们将变量和方法放在一个地方。那个地方是“类”。类是封装的基础。
  • 通过Java封装,您可以隐藏(限制访问)代码中的关键数据成员,从而提高安全性。
  • 正如我们前面讨论过的,如果一个数据成员被声明为“private”,那么它只能在同一类中访问。外部类无法访问其他类的数据成员(变量)。
  • 但是,如果您需要访问这些变量,您必须使用public的“getter”和“setter”方法。