📜  用Java封装

📅  最后修改于: 2020-03-19 01:28:55             🧑  作者: Mango

封装的定义是将数据包装在单个单元下。它是将代码及其所处理的数据绑定在一起的机制。考虑封装的另一种方法是,它是一种保护性屏蔽,可防止数据被此屏蔽之外的代码访问。

  • 从封装技术上讲,一个类的变量或数据对任何其他类都是隐藏的,并且只能通过声明了它们的自身类的任何成员函数来访问。
  • 与封装一样,使用数据隐藏概念将类中的数据与其他类隐藏,这是通过将类的成员或方法设置为私有来实现的,并且该类向最终用户或整个世界公开,而无需提供任何实现细节使用抽象概念,因此也称为数据隐藏和抽象的组合。
  • 可以通过以下方式实现封装:将类中的所有变量声明为私有,并在类中编写公共方法以设置和获取变量的值。

// Java展示封装
public class Encapsulate
{
    // private变量,这些只能被类的public方法访问
    private String mangoName;
    private int mangoRoll;
    private int mangoAge;
    // get方法
    // private variable mangoAge
    public int getAge()
    {
      return mangoAge;
    }
    // get方法
    public String getName()
    {
      return mangoName;
    }
    // get方法
    public int getRoll()
    {
       return mangoRoll;
    }
    // set方法
    public void setAge( int newAge)
    {
      mangoAge = newAge;
    }
    // se方法
    public void setName(String newName)
    {
      mangoName = newName;
    }
    // set方法
    public void setRoll( int newRoll)
    {
      mangoRoll = newRoll;
    }
}

在上面的程序中,由于变量被声明为私有,因此封装了EncapsulateDemo类。将getAge(),getName(),getRoll()之类的get方法设置为public,这些方法用于访问这些变量。诸如setName(),setAge(),setRoll()之类的setter方法也被声明为public,用于设置变量的值。

下面显示了访问EncapsulateDemo类的变量的程序:

public class TestEncapsulation
{
    public static void main (String[] args)
    {
        Encapsulate obj = new Encapsulate();
        // 设置变量的值
        obj.setName("Logan");
        obj.setAge(19);
        obj.setRoll(51);
        // 打印
        System.out.println("芒果's name: " + obj.getName());
        System.out.println("芒果's age: " + obj.getAge());
        System.out.println("芒果's roll: " + obj.getRoll());
        // 直接访问 芒果Roll是不可行的,因为有封装
        // System.out.println("芒果's roll: " + obj.mangoName);
    }
}

输出:

芒果's name: Logan
芒果's age: 19
芒果's roll: 51

封装的优点

  • 数据隐藏:用户将不了解类的内部实现。用户将看不到该类如何将值存储在变量中。他只知道我们将值传递给setter方法,并且变量已使用该值初始化。
  • 更高的灵活性:我们可以根据需要将类的变量设置为只读或只写。如果我们希望将变量设为只读,则必须忽略上述程序中的setter(),setAge()等setter方法,或者如果希望将变量设为只读,则必须忽略上面程序中的get方法,如getName(),getAge()等。
  • 可重用性:封装还提高了可重用性,并且易于随新要求进行更改。
  • 测试代码很容易:封装的代码很容易进行单元测试。