第十一節 java面向對象,封裝的簡單介紹

封裝得關鍵在於:一個類不允許直接修改另一個類的實例域,程序僅僅通過對象的方法與對象數據進行交互
/**
 * 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;

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章