iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Software Development

Java入門的30張門票系列 第 11

[Day11] 把錢裝進保險箱 - 封裝

  • 分享至 

  • xImage
  •  

封裝(Encapsulation),簡單來說用公開的方法存取私有的變數,將資料和存取資料所用的成員方法包在一個物件中,所有對物件資料的存取動作都必須要通過這個物件的成員方法當作介面來執行,其他的程式都沒有對物件內部資料的直接存取權力,就像是把貴重的物品放進一個保險箱,外面的人都沒辦法看到裡面是什麼東西,更沒辦法拿出來使用,只有保險箱的主人可以。而資料封裝的基本就是類別(class),一個class設計者可以決定其他的類別能不能讀取自己的class,對物件資料的存取動作,分成四個等級:

  • public: 所有類別皆可存取。
  • protected: 同一套件和不同套件的子類別都可以存取。
  • 預設: 同一套件(package)的類別才能存取。
  • private: 同一類別才能存取。

對於實體變數,通常會被設定為private,再通過method,像是用set/get來存取資料。

public class Goods {
	  private int num;
	  private double price;
	    
	  public void setNum(int num){
	    	this.num = num;  // 存商品編號資料
	  }
	  public int getNum() {
	    	return gno;  // 取商品編號資料
	  } 
	    
	  public void setPrice(double gprice){
	    	this.price = price;  // 存商品價格資料
	  }
	  public double getPrice(){
	    	return price;  // 取商品價格資料
	  }
}

如果直接取員工資料

public class GoodsTest {   
	  public static void main(String[] args) {
	      Goods g1 = new Goods();

	      System.out.println(g1.num());
	      System.out.println(g1.price());
	  }    
}

這樣子會編譯錯誤,因為num和price在Goods類別裡是private access,應更正如下就正常了。

public class GoodsTest {
	public static void main(String[] args) {
	      Goods g1 = new Goods();

	      g1.setNum(0001);
	      g1.setPrice(100.0);
	          
	      System.out.println(g1.getNum());  // 0001
	      System.out.println(g1.getPrice());  // 100.0
	}
}

上一篇
[Day10] 什麼是方法多載
下一篇
[Day12] 什麼是建構子
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言