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()方法读取字段。

