1.封裝的概念
(1)將東西包裝在一起,然后以新的完整的形式呈現出來(即將屬性和方法封裝到類里面,通過添加訪問修飾符來限制訪問權限,以達到信息隱藏的目的) (2)信息隱藏:隱藏對象的實現細節,不讓外部直接訪問到
(3)將數據和方法包裝進類中,加上具體實現的隱藏,共同被稱作封裝,其結果是一個同時帶有特征和行為的數據類型。(定義類,定義其屬性、方法的過程稱為封裝類)
(4)信息隱藏是OOP最重要的功能之一,也是使用訪問修飾符的原因。
(5)信息隱藏的原因包括:
①對模塊的任何實現細節所做的更改不會影響使用該模塊的代碼
②防止用戶意外修改數據
③使模塊易於使用和維護
(6)訪問修飾符:
①public(公開的):該類或非該類均可訪問,權限最大
②private(私有的):只有該類可以訪問,權限最小
③protected(受保護的):該類及其子類的成員可以訪問,同一個包中的類也可以訪問
④默認:同一個包中的類可以訪問
(7)屬性封裝的實現
①修改屬性的可見性來限制對屬性的訪問
②為每個屬性創建一對賦值(setter)方法和取值(getter)方法,用於公開對這些屬性的訪問接口
③在setter和getter方法中,根據需要加入對屬性操作的限制
public class Demo {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 22) {
System.out.println("錯誤!最小年齡應為22歲!");
this.age = 22;
} else {
this.age = age;
}
}
}
注意:除非必須公開底層實現細節,否則應該將所有屬性指定為private加以封裝,讓外界不能直接訪問修改,只能對外界提供set/get方法。使用屬性封裝,通過增加數據訪問限制,增強了類的可維護性。
(8)封裝方法的目的:
① 隱藏方法實現細節(方法體),向外部提供公開接口(方法頭),以供安全使用
② 簡化調用,方便修改維護
③ 根據需要,可以私有化方法以供類內部使用
類的修飾符:
1.前綴修飾符(public,abstract,final)
2.后綴修飾符(extends,implements)
2.構造方法
(1)類的構造方法的概念和作用
構造方法負責對象初始化工作,為對象的屬性賦合適的初始值。創建對象時,其類的構造方法確保在用戶操作對象之前,系統保證初始化的進行。(即對屬性進行初始化)
(2)構造方法的語法規則
① 構造方法名與類名相同
② 沒有返回類型
③ 方法實現主要為字段賦初始值
(3)構造方法的調用
構造方法的調用很特別:通過new操作符(返回新建實例的引用),即創建對象的同時調用構造方法來對屬性進行初始化。也就是在我們創建對象的時候自動調用的。注意:當我們在構造一個對象的時候,一定會調用構造方法,所以java系統保證每一個類都有構造方法。當一個類沒有顯示聲明構造方法的時候,系統會有一個默認的無參構造方法。
3.this關鍵字
(1)this關鍵字的特點:
① 在類的方法中使用this關鍵字代表的是調用此方法的對象的引用(可以認為this和引用變量是同一個人,存的是同樣的地址)
② this可以看做是一個變量,它的值是當前對象的引用
③ 使用this關鍵字可以處理方法中的成員變量和形參同名的問題
④ 當在方法內需要用到調用該方法的對象時,就可以用this
⑤ 在類的構造方法中可以調用this([參數列表])來調用該類的指定構造方法
public class Teacher {
private String name = "";
private int age;
private String city = "";
public Teacher() {
System.out.println("這是一個無參的構造方法");
}
public Teacher(String name, int age, String city) {
// 當一個構造方法去調用另一個構造方法的時候,對this的調用必須是該構造器中的第一條語句,因為要確保初始化的操作先被執行
// 構造方法中的this指的是正在被創建的對象
this();
this.name = name;
this.age = age;
this.city = city;
}
// 同一個類中的方法去調用同一個類中的其它方法的時候,this可加可不加,不加時,程序在編譯的時候會自動加上。
public String toString() {
// 這里的this可以省略不寫
return "名字:" + this.name + ",年齡:" + this.age + ",城市:" + this.city;
}
}