Menu Close

Java OOP中的封装

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

在本教程中,您将学习-

  • 什么是Java中的封装?
  • 通过例子学习封装
  • Java中的数据隐藏
  • Java中的Getter和Setter方法
  • 抽象与封装
  • Java封装的优点

通过示例学习封装

要详细了解封装,请思考以下具有存款和显示余额方法的银行帐户class

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”,如下所示。只能使用类中定义的方法进行访问。没有其他类或对象可以访问它们。

private int account_number;
private int account_balance;

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

因此,在我们这种情况下,黑客无法将-100美元存入您的帐户。

方法2:黑客的第一种方法无法存入这笔钱。接下来,他尝试使用“ deposit”方法进行一笔-100的存款。

但是方法的实现需要检查负值。因此,第二种方法也失败了。


if (a < 0) { 

 //show error

因此,您不会向外部用户公开数据。这使您的应用程序安全。

整个代码可以被认为是一个胶囊,并且您只能通过消息进行通信。因此,名称封装。

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

抽象与封装

封装常常被抽象误解。

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

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

Java封装的优点

  • 封装将数据与其相关功能绑定在一起。这里的功能是“方法”,数据是“变量”
  • 因此,我们将变量和方法放在一个地方。那个地方是“class”。类是封装的基础。
  • 使用Java封装,您可以在代码中隐藏(限制访问)关键数据成员,从而提高了安全性
  • 如前所述,如果将数据成员声明为“私有”,则只能在同一类中对其进行访问。没有外部类可以访问其他类的数据成员(变量)。
  • 但是,如果需要访问这些变量,则必须使用public的“ getter”和“ setter”方法。
Posted in Java

发表评论

相关链接