以下內容引用自http://wiki.jikexueyuan.com/project/java/ncapsulation.html:
封裝是面向對象程序設計四大基本概念之一,其余三個分別是繼承,多態和抽象。
封裝是一種可以使類中的字段私有並能通過公有方法來訪問私有字段的技術。如果一個字段被聲明為私有,它就不能在類的外部被訪問,從而隱藏了類內部的字段。基於這個原因,封裝有時也被稱為數據隱藏。
封裝可以被認為是一種能夠保護代碼和數據被定義在類外的其它代碼任意訪問的屏障。訪問數據和代碼由一個接口嚴格控制。
封裝的主要好處是修改實現的代碼而又不會破壞其他人使用代碼。封裝的這個特性使代碼具有可維護性、靈活性以及擴展性。
示例:
如下是一個使用了封裝的例子:
/* File name : EncapTest.java */ public class EncapTest{ private String name; private String idNum; private int age; public int getAge(){ return age; } public String getName(){ return name; } public String getIdNum(){ return idNum; } public void setAge( int newAge){ age = newAge; } public void setName(String newName){ name = newName; } public void setIdNum( String newId){ idNum = newId; } }
公有方法是從類外訪問到類內字段的入口。通常情況下,這些方法被定義為getters和setters 。因此想要訪問類內變量的任何其他類要使用getters和setters方法。
EncapTest類的變量可以像如下的方式訪問:
/* File name : RunEncap.java */ public class RunEncap{ public static void main(String args[]){ EncapTest encap = new EncapTest(); encap.setName("James"); encap.setAge(20); encap.setIdNum("12343ms"); System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge()); } } //這將產生下述結果: Name : James Age : 20
一、封裝的優點
- 類中的字段可以被設置為只讀或只寫。
- 類可以完全控制它字段里面所存儲的東西。
- 類的使用者不用知道類是如何存儲數據的。類可以改變字段的數據類型而類的使用者不需要改變任何之前的代碼。
測試工程:https://github.com/easonjim/5_java_example/tree/master/javabasicstest/test21