Java 封装

Java 封装

封装是面向对象编程的关键特性之一。封装是指将字段和方法捆绑在单个类中。

它阻止外部类访问和修改类的字段和方法。这也有助于实现数据隐藏


示例 1:Java 封装

class Area {

  // fields to calculate area
  int length;
  int breadth;

  // constructor to initialize values
  Area(int length, int breadth) {
    this.length = length;
    this.breadth = breadth;
  }

  // method to calculate area
  public void getArea() {
    int area = length * breadth;
    System.out.println("Area: " + area);
  }
}

class Main {
  public static void main(String[] args) {

    // create object of Area
    // pass value of length and breadth
    Area rectangle = new Area(5, 6);
    rectangle.getArea();
  }
}

输出

Area: 30

在上面的示例中,我们创建了一个名为 Area 的类。该类的主要目的是计算面积。

要计算面积,我们需要两个变量lengthbreadth,以及一个方法:getArea()。因此,我们将这些字段和方法捆绑在一个类中。

在这里,字段和方法也可以从其他类访问。因此,这不是数据隐藏

这仅仅是封装。我们只是将相似的代码放在一起。

注意:人们经常认为封装就是数据隐藏,但这并不完全正确。

封装是指将相关的字段和方法捆绑在一起。这可用于实现数据隐藏。封装本身不是数据隐藏。


为什么需要封装?

  • 在 Java 中,封装有助于我们将相关的字段和方法放在一起,使我们的代码更清晰、易于阅读。
  • 它有助于控制我们数据字段的值。例如,
    class Person {
      private int age;
    
      public void setAge(int age) {
        if (age >= 0) {
          this.age = age;
        }
      }
    }


    在这里,我们将 age 变量设为 private,并在 setAge() 方法中应用了逻辑。现在,age 不能为负数。
  • getter 和 setter 方法为我们的类字段提供了只读只写访问。例如,
    getName()  // provides read-only access
    setName() // provides write-only access
  • 它有助于解耦系统的组件。例如,我们可以将代码封装到多个模块中。

    这些解耦的组件(模块)可以独立且并行地开发、测试和调试。并且,某个组件中的任何更改都不会对其他组件产生任何影响。
  • 我们还可以使用封装来实现数据隐藏。在上面的示例中,如果我们把 length 和 breadth 变量改为 private,那么对这些字段的访问就会受到限制。

    并且,它们会被隐藏起来,不被外部类访问。这就是数据隐藏

数据隐藏

数据隐藏是一种通过隐藏实现细节来限制对数据成员的访问的方法。封装也提供了一种数据隐藏的方式。

我们可以使用访问修饰符来实现数据隐藏。例如,

示例 2:使用 private 说明符进行数据隐藏

class Person {

  // private field
  private int age;

  // getter method
  public int getAge() {
    return age;
  }

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

class Main {
  public static void main(String[] args) {

    // create an object of Person
    Person p1 = new Person();

    // change age using setter
    p1.setAge(24);

    // access age using getter
    System.out.println("My age is " + p1.getAge());
  }
}

输出

My age is 24

在上面的示例中,我们有一个 private 字段 age。由于它是 private,因此无法从类外部访问。

为了访问 age,我们使用了 public 方法:getAge()setAge()。这些方法称为 getter 和 setter 方法。

age 设置为 private 使我们能够限制从类外部的未经授权的访问。这就是数据隐藏

如果我们尝试从 Main 类访问 age 字段,将会收到一个错误。

// error: age has private access in Person
p1.age = 24;
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战