1. 程式人生 > 實用技巧 >java面向物件思想之封裝

java面向物件思想之封裝

一、什麼是封裝

  菜鳥教程對封裝的解釋是“在面向物件程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式介面的實現細節部分包裝、隱藏起來的方法。”。簡單來說就是對公用的java程式碼裝到一個盒子中。當需要使用這部分程式碼的是時候,通過呼叫這個打包好的盒子就可以對這個功能進行實現。

二、為什麼要進行封裝

  1. 減少耦合。程式設計要追求“低耦合,高內聚”。 高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合是僅暴露少量的方法給外部使用,儘量方便外部呼叫。封裝就滿足了低耦合的需求。
  2. 隱藏資訊,提高可靠性。封裝可以被認為是一個保護屏障,防止該類的程式碼和資料被外部類定義的程式碼隨機訪問。
  3. 提高程式碼的複用性。相同的功能程式碼不需要第二次書寫,直接呼叫就可以,極大的提高了程式碼的複用性,降低了程式碼量。
  4. 方便修改和實現。當需要對其某部分進行修改時,做到一改全改。

三、封裝的實現(屬性私有,get/set

  Student.java,是一個學生類。有私有屬性,這些屬性只有在本類裡面才有效。在Student類裡面針對各個屬性有get和set方法,這些方法是共有屬性,當產生一個Student物件時,就可以通過這些共有屬性來訪問這些私有變數。這就是這個類提供對外的介面。

public class Person {
    private String name;
    private int age;
    private int id;
    private char sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}

  Application.java通過建立一個物件來使用Student類中的私有屬性:

public class Application {
    public static void main(String[] args) {
        Person person=new Person();
System.out.println(person.getName()); person.setName("ThreePure"); System.out.println(person.getName());
person.setAge(21); System.out.println(person.getAge());
person.setId(512); System.out.println(person.getId());
person.setSex('男'); System.out.println(person.getSex()); } }

  輸出結果為:

null
ThreePure
21
512
男

  由運算結果可知,當變數被定義而沒有被初始化時,是會有一個預設值的。

  封裝還一個好處就是可以提高程式碼的安全性,這裡年齡可以隨意輸入,但是現實生活中,年齡的範圍是0-120歲,這就需要使用封裝對年齡進行限制。當輸入非法的資料時能夠自行判斷。對setAge方法進行修改。

 public void setAge(int age) {
        if (age>120 || age<0){
            System.out.println("輸入的年齡非法");
        }else {
            this.age = age;
        }
    }
person.setAge(121);
        System.out.println(person.getAge());

 運算結果:

輸入的年齡非法
0                 //使用預設值輸出。

  以上例項中public方法是外部類訪問該類成員變數的入口。因此,任何要訪問類中私有成員變數的類都要通過這些getter和setter方法。

四、IDEA快速建立get/set方法。

  在需要建立get/set方法處按Alt+insert組合鍵開啟Generate選單,選擇Getter and Setter。
  

在彈出來的選單中選中要建立get/set方法的變數:

  

到此,get/set方法的建立就完成了。