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