封裝得關鍵在於:一個類不允許直接修改另一個類的實例域,程序僅僅通過對象的方法與對象數據進行交互
/** * Created by Administrator on 2017/12/4. */ public class Person { public String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; }
}
** * Created by Administrator on 2017/12/4. * 聲明一個學生對象,包含私有的屬性name和age * 對外提供get set方法來獲取與設置對象的屬性 * * 對象包含屬性與方法:屬性是定義此對象的狀態,方法是用來改變對象的狀態的 * * private修飾變量代表此屬性私有化,只有類中可以訪問,類外事無法直接訪問的 * 這樣就保護了直接修改變量,只能通過方法來進行訪問與修改,但是如果說類中的屬性 * 不需要外界修改,那麼完全可以不提供get,set方法,達到保護的目的 * */ public class Student { private String name;//成員變量 private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
** *對象封裝的意義:屬性私有化,對象只向外暴露修改屬性的方法,而不直接向外暴露屬性 * 這樣可以控制屬性的訪問 * * 如果屬性私有化,那麼如果不想外部修改某個屬性的狀態,那麼可以直接不提供此屬性的修改方法 * * 並且在修改或者獲取屬性時,還可以對方法進行統一的管理,例如:已經過了一年,那麼所有人年齡都會 * 加一歲,那麼在獲取年齡的時候,就可以向如下的get方法寫,所有在獲取年齡的時候都會+1 * public int getAge() { * return age+1; * } */ public class base01 { public static void main(String[] args) { /** * 使用new 關鍵字創建對象,所有的對象都繼承object類,如果類中沒有顯示的定義 * 構造函數,那麼會調用object的無參構造函數創建對象 */ Student s=new Student(); //爲student的age和name進行set賦值 s.setAge(12); s.setName("xiaohei"); String name=s.getName(); int age=s.getAge(); System.out.println(name);//xiaohei System.out.println(age);//12 System.out.println("----------------------"); /** * Person類定義了:public修飾的name屬性,private修飾的age屬性 * 並且顯示的定義了構造函數,如下 */ //此時編譯不通過,因爲已經顯示的提供了有參的構造函數,那麼久不能調用父類Object中的無參構造函數了 //Person p=new Person(); //此時直接創建了一個對象,並且name等於xiaohei,age=12 Person p=new Person("xiaohei",12); //由於name屬性是public修飾,所以可以隨意的利用object.filed進行訪問與修改,如下: p.name="laowang"; System.out.println(p.name);//laowang 直接可以進行修改 //此種方式編譯無法通過,因爲此屬性是私有化的,無法直接訪問 //p.age=12; } }