何時(shí)使用封裝:
在編程中如果遇到【實(shí)體類】,生活中實(shí)際存在的類,通常就會(huì)被這個(gè)類當(dāng)中的數(shù)據(jù)全部私有化private。?代碼中,程序只會(huì)嚴(yán)格的執(zhí)行數(shù)據(jù)類型一致化問題,不會(huì)判斷你書寫代碼是否符合生活邏輯。?那么就有可能再賦值或者運(yùn)算過程中,某些參數(shù)或者方法,使用的是不符合業(yè)務(wù)邏輯。
就像性別,正常意義下是男和女,如果不對性別進(jìn)行封裝,那么若是輸入了外星人也是沒有辦法的,為了生活邏輯以及業(yè)務(wù)邏輯,當(dāng)然需要對一些變量進(jìn)行封裝。
public:公有的,公共屬性,用public 修飾的 成員變量和方法是任何人都可以使用的
???
private:私有的,用private修飾的成員變量或者成員方法只能在本類當(dāng)中使用,類外不能直接使用
用private修飾,就只能在本類里使用,但是此時(shí)如果需要在外部操作就遇到了問題。在這里引入set 和? get 方法。
set方法就是用來在類外【設(shè)置】類當(dāng)中的,用private修飾的成員變量的值
get方法就是用來在類外【獲取】類當(dāng)中的,用private修飾的成員變量的值
【使用set的好處】
??1. 使用set 可以將數(shù)據(jù)的賦值操作更加安全和符合業(yè)務(wù)邏輯
??2. 可以將使用的方法進(jìn)行保密,只給外部提供了一個(gè)使用的接口
【封裝的好處】
1.提供了 代碼的安全性
2.操作數(shù)據(jù)變的簡單
3.隱藏一部分代碼
代碼如下:
class VIP {
?
?//成員變量
?private int age;
?private char sex;//age和sex都被封裝過了,在類外不能使用
?String userName;
?
??public void setSex(char s) {
//set 方法:通過set方法提供給類外一個(gè)修改sex值的方式
if (s == '男' || s == '女') {
???sex = s;
??} else {
???System.out.println("輸入的性別有誤?你是不是去過泰國?系統(tǒng)默認(rèn)為女");
???sex = '女';
??}
?}
?
?public char getSex() {
??return sex;
?}//set與get的使用方法,后面的對象名首字母大寫
?
?public void setAge(int a) {
??if (a < 0) {
???System.out.println("輸入的年齡有誤,系統(tǒng)默認(rèn)為0");
???age = 0;
??} else {
???age = a;
??}
?} //參數(shù)合法性判斷是在set里面進(jìn)行的
?
?public int getAge() {
??return age;
?}
public String userName() {
??return userName;
?}
}
//以上是構(gòu)造函數(shù),上面的成員變量一定要在這里進(jìn)行初始化,否則下面調(diào)用需要在定義。
public class Demo4 {
?public static void main(String[] args) {
??VIP v4 = new VIP();
??
??v4.userName = "劉先生";
??//v4.age = -5;年齡不合法
??v4.setAge(5);
??v4.setSex('男');;
??//userName = "鐵臂阿童木";前面沒有v4,無法正確運(yùn)行,加入v4后,下面的打印名字就是鐵臂阿童木
??System.out.println("Sex :" + v4.getSex());
??System.out.println("Age :" + v4.getAge());
??System.out.println("name :" + v4.userName());//這里一定要注意!上面一定要寫上構(gòu)造函數(shù),否則打印不出來。
?}
}