1. 程式人生 > >JAVA三大特性之 封裝

JAVA三大特性之 封裝

我們日常使用的電腦主機,把cpu、記憶體、主機板等等都封裝到機箱裡面去。假如沒有機箱的話的出現什麼問題,主機、主機板全部都散落在一處,然後開機沒有開機按鈕,那麼需要我們直接操作接跳線才能把電腦開啟。這樣子的話假如操作不慎的話,會讓機器損壞危險,那麼假如用機箱封裝起來的話,那麼就不需要這樣子做了。體現了封裝的---安全特性。

你拿電腦去加記憶體,可以直接給電腦給維修的人,等他加好記憶體了之後。你拿到的還是那個機箱,裡面發生了怎樣子的變化你並不知道。封裝的第二個好處-將變化隔離。

 

在機箱裡面提供一個開機按鈕,而不需要你直接使用跳線開機的話,體現了封裝的—便於使用的特性。

 

只要機箱提供了一個開機的功能,然後無論這個機箱拿到哪裡去,都可以使用這個開機的功能.體現了封裝的---提供重複性的特性。

沒有封裝的情況: 

模擬問題

  1. 描述Employee類。定義姓名,工號,性別的成員變數,和工作的方法。成員使用public修飾。
  2. 建立Employee物件,物件.成員的方式進行賦值。最後該物件呼叫工作方法。
  3. 總結:如果不使用封裝,很容易賦值錯誤,並且任何人都可以更改,造成資訊的    不安全。
  4. 問題解決:使用封裝
public class EmployeeDemo {
	public static void main(String[] args) {
		// 建立物件
		Employee jack = new Employee();

		// 進位制通過類名.成員的形式呼叫成員。初始化例項變數
		jack.name = "jack";
		jack.id = "123456";
		jack.gender = "男";

		// 呼叫成員方法
		jack.work();
		System.out.println();

		// 傳入非法的引數
		jack.gender = "不是男人";
		jack.work();

	}
}

class Employee {
	String name;
	String id;
	String gender;

	public void work() {
		System.out.println(id + ":" + name + ":" + gender + " 努力工作中!!!");
	}
}

 使用封裝

package oop01;

public class EmployeeDemo {
	public static void main(String[] args) {
		// 建立物件
		Employee jack = new Employee();

		//編譯報錯
		jack.name = "jack";
		jack.id = "123456";
		jack.gender = "男";

		

		// 編譯報錯
		jack.gender = "不是男人";
		jack.work();

	}
}

class Employee {
   //使用了private修飾了成員變數
	private String name;
	private String id;
	private String gender;

	public void work() {
		System.out.println(id + ":" + name + ":" + gender + " 努力工作中!!!");
	}
}
問題:
		1:為什麼之前可以通過物件名.屬性名的方式訪問?
		2:public 成員修飾符,公共的誰都可以訪問。
		3:private 成員修飾符,私有的,只有自己可以訪問。
	2:修改Employee類 性別的修飾符修改為private
		1:編譯不通過
		2:private修飾的成員在自己所在的類中可以使用,在類外邊不可以使用。
3:Employee類的gender的修飾符修改為private後,無法再類外呼叫,那麼如何給gender設定值?
				1:對外提供公開的用於設定物件屬性的public方法
					1:設定set
					2:獲取get
				2:在set方法中加入邏輯判斷,過濾掉非法資料。
				3:將所有的成員變數封裝加上private,提供get、set方法
package oop01;

public class EmployeeDemo {
	public static void main(String[] args) {
		// 建立物件
		Employee jack = new Employee();

		// 呼叫公有方法,給成員變數賦值。
		jack.setId("007");
		jack.setName("jack");
		jack.setGender("男xx");

		// 獲取例項變數的值
		System.out.println(jack.getGender());
		System.out.println(jack.getId());
		System.out.println(jack.getName());

		// 呼叫成員方法
		jack.work();

	}
}

class Employee {
	private String name;
	private String id;
	private String gender;

	// 提供公有的get set方法
	public String getName() {
		return name;
	}

	public void setName(String n) {
		name = n;
	}

	public String getId() {
		return id;
	}

	public void setId(String i) {
		id = i;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gen) {
		if ("男".equals(gen) || "女".equals(gen)) {
			gender = gen;
		} else {
			System.out.println("請輸入\"男\"或者\"女\"");
		}

	}

	public void work() {
		System.out.println(id + ":" + name + ":" + gender + " 努力工作中!!!");
	}
}

封裝的好處

1:隱藏了類的具體實現

2:操作簡單

3:提高物件資料的安全性