Java教程-详解 Java 封装

封装(Encapsulation)是将代码和数据封装到一个单元中的过程,类似于将多种药物混合在一个胶囊中。
在 Java 中,我们可以通过将类的数据成员设为私有来创建一个完全封装的类。然后,我们可以使用 setter 和 getter 方法来设置和获取内部的数据。
Java 中的 Bean 类是封装的一个典型示例。
Java 封装的优点
通过提供只读或只写的 setter 或 getter 方法,我们可以对类的访问进行控制。换句话说,我们可以选择跳过 getter 或 setter 方法。
封装使我们能够对数据进行控制。例如,如果我们希望 id 的值只能大于 100,我们可以在 setter 方法中添加逻辑来实现这一要求。我们可以编写逻辑,阻止存储负数的操作在 setter 方法中进行。
封装是在 Java 中实现数据隐藏的一种方法,因为其他类将无法直接访问私有数据成员。
封装使得类更容易进行测试,因此更适合单元测试。
标准的集成开发环境(IDE)提供了生成 getter 和 setter 方法的工具,因此在 Java 中创建封装类既简单又快速。
Java 封装的简单示例
下面是一个简单的封装示例,其中包含一个字段以及它的 setter 和 getter 方法。
文件:Student.java
//一个Java类,它是一个完全封装的类。
//它有一个私有数据成员和getter和setter方法。
package com.javatpoint;
public class Student{
//私有数据成员
private String name;
//name的getter方法
public String getName(){
return name;
}
//name的setter方法
public void setName(String name){
this.name=name
}
}
文件:Test.java
//一个Java类,用于测试封装类。
package com.javatpoint;
class Test{
public static void main(String[] args){
//创建封装类的实例
Student s=new Student();
//setting value in the name member
s.setName("vijay");
//获取name成员的值
System.out.println(s.getName());
}
}
编译方式:javac -d。测试.java
运行者:java com.javatpoint.Test
输出:
维杰Java
只读类
//一个只有getter方法的Java类。
public class Student{
//私有数据成员
private String college="AKG";
//college的getter方法
public String getCollege(){
return college;
}
}
现在,您无法更改大学数据成员“AKG”的值。
s.setCollege("KITE"); //将呈现编译时错误
只写类
//一个只有setter方法的Java类。
public class Student{
//私有数据成员
private String college;
//college的getter方法
public void setCollege(String college){
this.college=college;
}
}
现在,你无法获取学院的价值,你只能改变学院数据成员的价值。
System.out.println(s.getCollege()); //编译时报错,因为没有这个方法
System.out.println(s.college); //编译时错误,因为大学数据成员是私有的。
//所以,类外是无法访问的
Java封装的另一个例子
让我们看另一个封装的例子,它只有四个字段和它的 setter 和 getter 方法。
文件:Account.java
//一个完全封装的Account类。
//它有一个私有数据成员和getter和setter方法。
class Account {
//私有数据成员
private long acc_no;
private String name,email;
private float amount;
//公共getter和setter方法
public long getAcc_no() {
return acc_no;
}
public void setAcc_no(long acc_no) {
this.acc_no = acc_no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public float getAmount() {
return amount;
}
public void setAmount(float amount) {
this.amount = amount;
}
}
文件:TestAccount.java
//一个Java类来测试封装类Account。
public class TestEncapsulation {
public static void main(String[] args) {
//创建账户类的实例
Account acc=new Account();
//通过setter方法设置值
acc.setAcc_no(7560504000L);
acc.setName("Sonoo Jaiswal");
acc.setEmail("baidu@baidu.com");
acc.setAmount(500000f);
//通过getter方法获取值
System.out.println(acc.getAcc_no()+" "+acc.getName()+" "+acc.getEmail()+" "+acc.getAmount());
}
}
输出:
7560504000 Sonoo Jaiswal baidu@baidu.com 500000.0