概念:
在OOP中,封裝(encapsulation)是指對於某個對象,Java隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀取和修改的訪問級別。
封裝可以被認爲是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問。
要訪問該類的代碼和數據,必須通過嚴格的接口控制。
封裝最主要的功能在於我們能修改自己的實現代碼,而不用修改那些調用我們代碼的程序片段。
適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。
而封裝的優點則有以下幾點:
①良好的封裝能夠減少耦合。
②類內部的結構可以自由修改。
③可以對成員變量進行更精確的控制。
④隱藏信息,實現細節。
對於想要實現的操作,一個類已經將其封裝好,你只需調用方法即可,這正是OOP中的精髓。
通過封裝使一部分成員充當類與外部的接口,而將其他的成員隱藏起來,這樣就達到了對成員訪問權限的合理控制,使不同類之間的相互影響減少到最低限度,進而增強數據的安全性和簡化程序的編寫工作。我們還是舉兩個例子來更好的理解封裝這個概念!!!👇👇👇
The first example:
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方法來獲取其值。
俗話說,概念理解的再多再準確,也不如寫一段代碼熟悉的更快!下面我們再舉一個和上面類似的例子吧!!!👇👇👇
The second example:
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三大特性之一——封裝的理解!!!