/*
- 封裝的含義和作用
- 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);
}
}