1.概念理解:
在OOP中,封装(encapsulation)是指对于某个对象,Java隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
而封装的优点则有以下几点:
①良好的封装能够减少耦合。
②类内部的结构可以自由修改。
③可以对成员变量进行更精确的控制。
④隐藏信息,实现细节。
对于想要实现的操作,一个类已经将其封装好,你只需调用方法即可,这正是OOP中的精髓。
通过封装使一部分成员充当类与外部的接口,而将其他的成员隐藏起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。我们还是举两个例子来更好的理解封装这个概念!!!👇👇👇
2.应用举例
Example 1:
import java.util.*;
class Member {
public String name;//公共属性name
public int salary;//公共属性salary
private String sex;//私有属性sex
public void setSex(String sex) {//定义一个公共的方法来设置sex属性
this.sex=sex;
}
public String getSex() {//定义一个公共的方法来获取sex属性
return this.sex;
}
public void setHobby(String hobby) {//定义一个公共的方法来设置hobby属性
this.hobby=hobby;
}
public String getHobby() {//定义一个公共的方法来获取hobby属性
return this.hobby;
}
public void talk() {//定义一个公共的方法talk
System.out.println(name+"聊得非常开心!");
}
}
public class Demo {
public static void main(String[] args) {
Member m=new Member();
m.name="小红";//对公共属性name直接赋值
m.salary=5000;//对公共属性salary也可以直接赋值
m.setSex("女");//对私有属性操作,要通过get来访问、set来更改的方法
m.setHobby("逛街");//同上
System.out.println("姓名:"+m.name+",性别:"+m.getSex()
+",薪水:"+m.salary+",爱好:"+m.getHobby()+"!");
m.talk();//可以调用Member类中的公共方法talk
}
}
运行结果如下:
上面这段代码,我们举例一个相对简单的例子,通过注释可以看到,这就实现了封装,对于公共属性name和salary,我们可以直接对其赋值;但是对于私有属性sex和hobby,我们需要通过使用set方法来为其赋值,再通过get方法来获取其值。
俗话说,概念理解的再多再准确,也不如写一段代码熟悉的更快!下面我们再举一个和上面类似的例子吧!!!👇👇👇
Example 2:
import java.util.*;
class Young {
private String name;
private int age;
private String major;
public void setName(String name) {
this.name=name;
}
public void setAge(int age) {
this.age=age;
}
public void setMajor(String major) {
this.major=major;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getMajor() {
return this.major;
}
}
public class Forever {
public static void main(String[] args) {
Young member=new Young();
member.setName("张三");
member.setAge(20);
member.setMajor("计算机科学与技术");
System.out.println("学生姓名:"+member.getName()+
",年龄:"+member.getAge()+
",专业:"+member.getMajor()+"!");
}
}
运行结果如下:
这个例子和第一个差不多,大家可以去理解一下,如有问题,可以评论或者私信!!!
那么,以上就是博主对Java三大特性之一——封装的理解!!!