1.概念
- 封裝(Encapsulation)是面向?qū)ο蠓椒?/a>的重要原則亚享,就是把對象的屬性和操作結(jié)合為一個獨立的整體,并盡可能隱藏對象的內(nèi)部實現(xiàn)細節(jié)侈沪。
- 封裝是為了保護數(shù)據(jù)晚凿,這里的數(shù)據(jù)是指對象的屬性(不是方法的局部變量)。
保護數(shù)據(jù)中的保護是什么意思歼秽?保護是指對數(shù)據(jù)的讀寫權(quán)限。
2.封裝的實現(xiàn)
封裝是靠訪問修飾符和getter and setter方法來實現(xiàn)的。
2.1 訪問修飾符
- public:公共的
被public關(guān)鍵字修飾的屬性或方法可以在任意位置被訪問呻惕,沒有使用的權(quán)限滥比。 - protected:受保護的
被protected關(guān)鍵字修飾的屬性或方法只能在同一個包中的所有類和不同包中的子類訪問,出了一個包但不是該類的子類的話就不可以訪問濒持。 - 默認|default(什么都不寫)
default關(guān)鍵字修飾的屬性或方法只能在同一個包中的所有類訪問寺滚,且必須是同級的包,在一個包中的子包也不可以訪問村视。但我們在定義屬性和方法時不需要將default關(guān)鍵字寫出來,沒有關(guān)鍵字修飾的屬性或方法就是default的訪問權(quán)限蚁孔。 -
private:私有的
示意圖:
用private關(guān)鍵字修飾的屬性和方法只能在該類的大括號內(nèi)訪問,出了這個類就不能被訪問了站刑。當(dāng)一個子類繼承一個父類的屬性和方法時,若父類的屬性或方法被private修飾绞旅,那么子類也不可以繼承該屬性或方法。
2.2 getter and setter
getter 和 setter 是用public修飾的用來讀取和修改類中受訪問權(quán)限的屬性的get()和set()因悲。以private最為典型晃琳。
3.示例
以私有為例
public class Student {
private String name;
private int score;
private String no;
public Student() {
}
public Student(String name, int score, String no) {
this.name = name;
this.score = score;
this.no = no;
}
public String getName() { //獲取name屬性
return name;
}
public void setName(String name) { //修改name屬性
this.name = name;
}
public int getScore() { //獲取score屬性
return score;
}
public void setScore(int score) { //修改score屬性
this.score = score;
}
public String getNo() { //獲取no屬性
return no;
}
public void setNo(String no) { //修改no屬性
this.no = no;
}
}
private修飾的屬性到其他類使用就會報錯如下圖:
此時需要調(diào)用get()和set()來實現(xiàn)調(diào)用
public class Test {
public static void main(String[] args) {
Student student = new Student("張三",90,"123456");
System.out.println(student.getName()); //獲取當(dāng)前學(xué)生姓名
student.setName("李四"); //修改學(xué)生姓名為李四
System.out.println("修改后的學(xué)生姓名"+student.getName()); //獲取修改后的學(xué)生姓名
}
}