封装(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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想