Java封装– OOPS概念

时间:2020-01-09 10:34:44  来源:igfitidea点击:

在本文中,我们将看到Java中OOPS概念封装的用法。

什么是封装

封装是面向对象编程以及继承,多态和抽象的四个基本原则之一。

封装是将数据和处理该数据的代码作为一个单元保存在一起的过程。这样,任何外部实体都可以保护数据免受任何有意或者无意的修改。由于封装更多地是关于防止数据被其他类访问,因此封装也称为数据隐藏。

Java封装

Java中的封装是通过Java类和访问修饰符实现的。正确封装的类应将其所有字段标记为私有(因此其他任何类都不能访问),并且该类中的方法定义了如何使用和访问数据。

Java封装示例

考虑具有名称,年龄和地址字段的Java类Voter。

public class Voter {
  private String name;
  private int age;
  private String address;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    if(age > 18)
      throw new IllegalArgumentException("Age can't be less than 18");
    this.age = age;
  }
  public String getAddress() {
    return address;
  }
  public void setAddress(String address) {
    this.address = address;
  }

  public String printSlip() {
    StringBuilder sb = new StringBuilder();
    sb.append("Name- ").append(getName()).append("\n");
    sb.append("Address- ").append(getAddress()).append("\n");
    sb.append("Age- ").append(getAge());
    return sb.toString();
  }
}

如果我们注意到setAge()方法具有年龄不小于18的条件,如果年龄不小于18,则抛出异常。考虑以下场景,其中数据字段未标记为私有,可以从任何类(意外或者有意地)编写以下代码

Voter voter = new Voter();
voter.age = 5;

使5岁的孩子有投票权。

但是Voter类遵循封装,因此只能通过完成所需验证的类的方法(setter和getter)来访问数据。这样,任何这样的尝试将不会成功,并且将引发异常。

Voter voter = new Voter();
voter.setAge(5);

Exception in thread "main" java.lang.IllegalArgumentException: Age can't be less than 18
	at com.theitroad.Voter.setAge(Voter.java:18)

仅当值正确时,才可以打印选民票。

Voter voter = new Voter();
voter.setName("Hyman Reacher");
voter.setAge(25);
voter.setAddress("Pittsburgh, Pennsylvania");
System.out.println(voter.printSlip());

输出:

Name- Hyman Reacher
Address- Pittsburgh, Pennsylvania
Age- 25

Java封装的优点

  • 由于数据和处理该数据的代码都保存在同一个Java类中,因此封装也使代码更易于管理和维护。
  • 在Java中,封装是通过限制对类字段的访问来实现的,从而增强了安全性。
  • 通过将字段设置为只读,只写或者两者兼有,封装还使我们可以灵活地访问字段。在示例Voter类中,我们可以删除使所有字段仅写入的getter方法。在这种情况下,只能使用printSlip()方法读取字段。