java面向對象練習8 封裝性與權限修飾符

/*

  • 封裝的含義和作用
  • 1,隱藏對象內部的複雜性,只對外公開簡單的接口便於調用,從而提高系統的可擴展性,可維護性。
  • 把該隱藏的隱藏起來,把該暴露的暴露出來。就是封裝性設計的思想。
  • 2,程序設計追求高內聚,低耦合
  • 高內聚:類內部的數據操作細節在內部完成,不允許外部干涉
  • 低耦合:僅對外暴露少量方法用於調用
  • 4,具體情況:當創建一個類的時候,裏面的成員變量可以通過“對象.屬性”的方式調用賦值。
  • 賦值操作會受到數據類型和範圍的限制,除此以外沒有其他限制。但是在實際應用中,往往需要給屬性賦值做出額外
  • 的限制。限制條件無法在屬性聲明的時候體現,可以通過方法添加限制條件。同時需要避免其他用戶使用“對象.屬性”
  • 的方式對屬性賦值。需要將屬性聲明爲私有(private).此時針對屬性便體現出封裝性。
  • 5,在私有化屬性的同時,需要提供公共(public)的方法來對屬性進行賦值(set)與訪問(get)操作.
  • 6,封裝性的其他體現:私有方法,單例模式(私有構造器)
  • 7,通過權限修飾符實現封裝與隱藏。
  • java中的四個權限修飾符;從小到大依次爲,private,缺省(default),protected,public。
  • private:類內部
  • default:類內部 同一個包內
  • protected:類內部 同一個包內 不同包的子類
  • public: 類內部 同一個包內 不同包的子類 同一個工程下
  • 修飾符寫在成員變量之前
  • 修飾符可以用在類及類的內部結構(屬性,方法,構造器,內部類)上。類中的代碼塊不行
  • 對於類(class)的權限修飾只能用public和default
  • public類可以在任意地方訪問。
  • default類只能被同一個包內的類訪問。
  • 8,如果兩個包a,b內有同名的類c,在其中一個包a內導入b.c時,創建c的對象是b.c的實例化對象,執行b.c的屬性和方法。

*/

package com.atguigu.contact;
public class Object_Encapsulation {
	//權限修飾符測試
	public int orderPublic;//公開屬性
	int orderDefault;//缺省屬性
	private int orderPrivate;//私有屬性
	public void methodPublic() {
		orderPublic = 1;
		orderDefault = 1;
		orderPrivate = 1;
		methodPrivate();
	}//公開方法
	void methodDefault() {
		orderPublic = 2;
		orderDefault = 2;
		orderPrivate = 2;
		methodPrivate();
	}//缺省方法
	private void methodPrivate() {
		orderPublic = 3;
		orderDefault = 3;
		orderPrivate = 3;
	}//私有方法
/*
  package com.atguigu.contact;
  public class ObjectTest {//同包不同類,調用私有屬性和方法報錯
    Object_Encapsulation o = new Object_Encapsulation();
	 o.orderDefault = 1;
	 o.orderPublic  = 1;
	// o.orderPrivate = 1; 
	 o.methodPublic();
	 o.methodDefault();
	// o.methodPrivate();
	  }	
 */
	/*
	 package exercise;
	import java.util.*;
	import com.atguigu.contact.*;//不同包不同類下,需要先導包,default屬性和方法不可用
	public class ObjectTest {
	Object_Encapsulation o = new Object_Encapsulation();
	 //o.orderDefault = 1;
	 o.orderPublic  = 1;
	// o.orderPrivate = 1; 
	 o.methodPublic();
	 //o.methodDefault();
	// o.methodPrivate();
	 }
	 */
		
	public static void main(String[] args) {
	rabbit rab = new rabbit();
	rab.name = "007";
	System.out.println(rab.name);	
	//rab.age;//私有屬性只能在類內調用	
	 rab.setAge(-1);
	 rab.setAge(32);
	 rab.setAge(10);
	 System.out.println(rab.getAge());
	}
}
//創建類以測試權限修飾符
	class rabbit{
		//設置類的屬性
		String name = setName("cube");
		public int weight;		
		private int age;
		//創建方法設置私有屬性
		public void setAge(int i){//賦值方法有形參無返回值
			if(i >= 0 && i <= 30) {//通過語句對賦值情況做限制。也可以拋出異常
				
			}else if (i < 0) {
				System.out.println("兔子還不存在");
			}else {
				System.out.println("兔子成精了");
			}
		}
		//創建方法訪問私有屬性
		public int getAge() {//獲取方法無形參有返回值
			return age;
		}	
		
		private String setName(String s) {
			 return name = s;				
		}
		
		void getName(){
			System.out.println(name);
		}								
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章