1. 程式人生 > >java的三大特徵之一封裝

java的三大特徵之一封裝

封裝,是面向物件思想的特徵之一。面向物件共有三個特徵:封裝,繼承,多型。

封裝表現:
    1、方法就是一個最基本封裝體。
    2、類其實也是一個封裝體。
從以上兩點得出結論,封裝的好處:
    1、提高了程式碼的複用性。
    2、隱藏了實現細節,還要對外提供可以訪問的方式。便於呼叫者的使用。這是核心之一,也可以理解為就是封裝的概念。

    3、提高了安全性。

封裝舉例

機箱:
一臺電腦,它是由CPU、主機板、顯示卡、記憶體、硬碟、電源等部件組長,其實我們將這些部件組裝在一起就可以使用電腦了,但是發現這些部件都散落在外面,很容造成不安全因素,於是,使用機箱殼子,把這些部件都裝在裡面,並在機箱殼上留下一些插口等,若不留插口,大家想想會是什麼情況。
總結:機箱其實就是隱藏了辦卡裝置的細節,對外提供了插口以及開關等訪問內部細節的方式。

私有private

Demo:
描述人。Person
屬性:年齡。
行為:說話:說出自己的年齡。

class Person {
    int age;
    String name;
    public void show() {
        System.out.println("age=" + age + ",name" + name);
    }
}

public class PersonDemo {
    public static void main(String[] args) {
         // 建立Person物件
         Person p = new Person();
         p.age = -20; // 給Person物件賦值
         p.name = "張三";
         p.show(); // 呼叫Person的show方法
    }
}

上述程式碼發現,雖然我們用Java程式碼把Person描述清楚了,但有個嚴重的問題,就是Person中的屬性的行為可以任意訪問和使用。這明顯不符合實際需求。
可是怎麼才能不讓訪問呢?需要使用一個Java中的關鍵字也是一個修飾符 private(私有,許可權修飾符)。只要將Person的屬性和行為私有起來,這樣就無法直接訪問。

class Person {
    private int age;
    private String name;
    public void show() {
         System.out.println("age=" + age + ",name" + name);
    }
}
年齡已被私有,錯誤的值無法賦值,可是正確的值也賦值不了,這樣還是不行,那怎麼辦?按照封裝的原理,隱藏後,還需要提供訪問方式。只要對外提供可以訪問的方法,讓其他程式訪問這些方法。同時在方法中可以對資料進行驗證。

一般對成員屬性的訪問動作:賦值(設定 set),取值(獲取 get),因此對私有的變數訪問的方式可以提供對應的 setXxx或者getXxx的方法。

class Person {
    // 私有成員變數
    private int age;
    private String name;
    // 對外提供設定成員變數的方法
    public void setAge(int a) {
	// 由於是設定成員變數的值,這裡可以加入資料的驗證
	if (a < 0 || a > 130) {
	     System.out.println(a + "不符合年齡的資料範圍");
	     return;
	}
	    age = a; 
     }
     // 對外提供訪問成員變數的方法
     public void getAge() {
	return age;
     }
}
總結:
類中不需要對外提供的內容都私有化,包括屬性和方法。
以後再描述事物,屬性都私有化,並提供setXxx getXxx方法對其進行訪問。

注意:私有僅僅是封裝的體現形式而已。