一异吻、封裝的概述
??封裝是面向三大特征之一,是面向?qū)ο缶幊陶Z言對客觀世界的模擬尔许,客觀世界里成員變量都是隱藏在對象內(nèi)部的,外界無法直接操作和修改终娃。就像之前說的學生類中的年齡味廊。
??封裝的原則:
- 將不需要對外提供的內(nèi)容都隱藏起來
- 把屬性隱藏,提供公共方法對其訪問
??封裝的好處:
- 通過方法來控制成員變量的操作棠耕,提高了代碼的安全性
- 把代碼用方法進行封裝余佛,提高了代碼的復用性
二、封裝中的關(guān)鍵字
1窍荧、private
??private是一個權(quán)限修飾符辉巡,可以修飾成員(包括成員變量和成員方法),被private修飾的成員只能在本類中才能訪問蕊退。
??應用:
??把成員變量用private修飾郊楣,提供getXxx()/setXxx()方法
2憔恳、this關(guān)鍵字
??this代表所在類的對象引用,主要用于解決成員變量被隱藏的問題净蚤。
3钥组、關(guān)鍵字的運用
例:
//定義一個學生類
public class Student {
// 學生的屬性:姓名、年齡
private String name;
private int age;
// 學生的行為:吃飯今瀑、學習
public void eat() {
System.out.println("吃飯");
}
public void study() {
System.out.println("學習");
}
// getXxx()和setXxx()
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
三程梦、構(gòu)造方法
??構(gòu)造方法主要是用來給對象的數(shù)據(jù)進行初始化。
1橘荠、定義格式
//無參的構(gòu)造方法
public 方法名(){
}
//有參的構(gòu)造方法
public 方法名(參數(shù)列表){
this.成員變量1 = 參數(shù)1;
this.成員變量2 = 參數(shù)2屿附;
...
}
2、調(diào)用格式
類名 對象名 = new 構(gòu)造方法名(...);
3哥童、構(gòu)造方法的注意事項
??(1)如果我們沒有給出構(gòu)造方法挺份,系統(tǒng)將給出一個默認的無參數(shù)構(gòu)造方法供我們使用;
??(2)如果我們給出了構(gòu)造方法如蚜,系統(tǒng)將不再提供默認的構(gòu)造方法供我們使用压恒。這個時候如果還想用無參數(shù)構(gòu)造方法,就必須自己提供错邦。因此一般推薦自己給出無參數(shù)構(gòu)造方法探赫。
??(3)構(gòu)造方法也可以重載。
四撬呢、標準類的代碼寫法和測試
類:
- 成員變量:被private修飾
- 構(gòu)造方法:無參構(gòu)造方法和有參構(gòu)造方法
- 成員方法:getXxx()伦吠、setXxx()和每個事物完成不同行為的方法
給成員變量賦值的方法:
- 通過無參構(gòu)造方法生成對象,然后調(diào)用setXxx()方法給對象賦值
- 通過帶參構(gòu)造方法賦值
例:
定義一個學生類
public class Student2 {
//成員變量:名字和年齡
private String name;
private int age;
//無參的構(gòu)造方法
public Student2() {
}
//有參的構(gòu)造方法
public Student2(String name, int age) {
this.name = name;
this.age = age;
}
// getXxx()和setXxx()
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
定義學生類的測試類
public class StudentTest2 {
public static void main(String[] args) {
// 使用無參構(gòu)造方法生成對象
Student2 stu = new Student2();
// 使用set方法賦值
stu.setName("張三");
stu.setAge(18);
// 使用get方法調(diào)用
System.out.println("姓名:" + stu.getName());
System.out.println("年齡:" + stu.getAge());
// 使用有參構(gòu)造方法生成對象并賦值
Student2 stu1 = new Student2("李四", 25);
// 使用get方法調(diào)用
System.out.println("姓名:" + stu1.getName());
System.out.println("年齡:" + stu1.getAge());
}
}