Java封裝(Encapsulation)-詳解

花傷情猶在發表於2020-11-27

【1】生活案例:
ATM , 電線
【2】Java中封裝的理解:
將某些東西進行隱藏,然後提供相應的方式進行獲取。
在這裡插入圖片描述

我們程式設計追求“高內聚,低耦合”。
➢高內聚:類的內部資料操作細節自己完成,不允許外部干涉;
➢低耦合:僅對外暴露少量的方法用於使用。
隱藏物件內部的複雜性,只對外公開簡單的介面。便於外界呼叫,從而提
高系統的可擴充套件性、可維護性。通俗的說,把該隱藏的隱藏起來,該暴露
的暴露出來。這就是封裝性的設計思想。
【3】封裝的好處:
提高程式碼的安全性

【4】程式碼:通過一個屬性感受封裝:

public class Girl {//女孩
    //屬性:
    private int age;
    //讀取年齡:
    public int duquAge(){
        return age;
    }
    //設定年齡:
    public void shezhiAge(int age){
        if(age >= 30 ){
            this.age = 18;
        }else{
            this.age = age;
        }
    }
}
public class Test {
    //這是一個main方法,是程式的入口:
    public static void main(String[] args) {
        //建立一個Girl類的物件:
        Girl g = new Girl();
        /*g.age = 33;
        System.out.println(g.age);*/
        //設定年齡:
        g.shezhiAge(31);
        //讀取年齡:
        System.out.println(g.duquAge());
    }
}

上面的程式碼,對於屬性age來說,我加了修飾符private,這樣外界對它的訪問就受到了限制,現在我還想加上其他的限制條件,但是在屬性本身上沒有辦法再加了,所以我們通過定義方法來進行限制條件的新增。
以屬性為案例:
進行封裝:
(1)將屬性私有化,被private修飾–》加入許可權修飾符
一旦加入了許可權修飾符,其他人就不可以隨意的獲取這個屬性
(2)提供public修飾的方法讓別人來訪問/使用
(3)即使外界可以通過方法來訪問屬性了,但是也不能隨意訪問,因為我們們在方法中可以加入 限制條件。

【5】實際開發中,方法一般會寫成 setter,getter方法:
可以利用IDEA快捷鍵生成:alt+insert -->getter and setter:

public class Girl {//女孩
    //屬性:
    private int age;
    //讀取年齡:
    public int getAge(){
        return age;
    }
    //設定年齡:
    public void setAge(int age){
        if(age >= 30 ){
            this.age = 18;
        }else{
            this.age = age;
        }
    }
}

【6】加深練習:

public class Student {
    //屬性:
    private int age;
    private String name;
    private String sex;
    //加入對應的setter和getter方法:
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        if("男".equals(sex) || "女".equals(sex) ){//sex是男 或者 是 女
            this.sex = sex;
        }else{
            this.sex = "男";
        }
    }
    //加入構造器:
    public Student(){
    }
    public Student(int age,String name,String sex){
        this.age = age;
        this.name = name;
        //this.sex = sex;
        this.setSex(sex);
    }
}
public class Test {
    //這是一個main方法,是程式的入口:
    public static void main(String[] args) {
        //建立一個Student物件:
        Student s1 = new Student();
        s1.setName("nana");
        s1.setAge(19);
        s1.setSex("女");
        System.out.println(s1.getName()+"---"+s1.getAge()+"----"+s1.getSex());
        Student s2 = new Student(18,"菲菲","asdfasdfsadf");
        System.out.println(s2.getName()+"---"+s2.getAge()+"----"+s2.getSex());
    }
}

相關文章