1. 程式人生 > >java中封裝的作用和含義

java中封裝的作用和含義

程式設計追求“高內聚,低耦合”。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉。低耦合是僅暴露少量的方法給外部使用,儘量方便外部呼叫。

程式設計中封裝的具體優點:

1.提高程式碼的安全性

2.提高程式碼的複用性

3.“高內聚”:封裝細節,便於修改內部程式碼,提高可維護性

4.“低耦合”:簡化外部呼叫,便於呼叫者使用,便於擴充套件和寫作。

java中使用“訪問控制符”來控制哪些細節需要封裝。哪些細節需要暴露的。Java中4種“訪問控制符”。分別為:private、default、protected、public,他們說明了面相物件的封裝性。

測試案例程式碼:

package com.jackfujia.oo2;
/**
 * 
 *測試封裝
 * @author Administrator
 *
 */
public class TestEncapsulation {
    public static void main(String[] args) {
        Human h = new Human();
        //h.age = 13; 這裡因為下面的age被封裝起來了。對其不可見。所以無法呼叫
        h.name = "福福福福福";
        h.height = 200;
    }
}


class Woman extends Human{
    void sayAge2() {
        // System.out.println(age); 子類也無法使用父類的私有屬性和方法。
    }
}

package com.jackfujia.oo;

import com.jackfujia.oo2.Human;
public class TestEncapsulation2 {
    Human h = new Human();
    // h.name = "俯臥"; name為預設default屬性,不能被不同包的類訪問。
    //h.height = 100; 不同包的不同類

}

class Girl extends Human{
    void shenGao() {
        System.out.println(height); //不同包的子類可以使用
    }
}
 

package com.jackfujia.oo2;

public class Human{
    private int age; //加了private,只能在這個類裡面用
    String name; //預設default。預設在包裡的都能用
    protected int height;
    void sayAge() {
        System.out.println(age);
    }

}

封裝的使用細節:

類的屬性的處理:

1.一般使用private訪問許可權

2.提供相應的get、set方法來訪問相關屬性,這些方法通常是public修飾的。以提供對屬性的賦值與讀取操作。(注意!boolean變數的get方法是is開頭。)

3.一些只用於本類的輔助性方法,可以使用private修飾,希望其他類呼叫的方法用public修飾。

案例小程式碼:

package com.jackfujia.oo2;
/**
 * 仍然測試封裝
 * @author Administrator
 *
 */
public class Person4 {
    private int id;
    private String name;
    private int age;
    private boolean man;
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(int age) {
        if(age >= 1 && age <= 130) {
        this.age = age;
        }else {
            System.out.println("請輸入正常的年齡");
        }
    }
    
    public String getName() {
        return this.name;
    }
    public int getAge() {
        return this.age;
    }

    public int getId() {
        return id;
    }

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

    public boolean isMan() {
        return man;
    }

    public void setMan(boolean man) {
        this.man = man;
    }
    
        
}
 

package com.jackfujia.oo2;
/**
 * 
 *測試封裝
 * @author Administrator
 *
 */
public class TestEncapsulation {
    public static void main(String[] args) {
        Human h = new Human();
        //h.age = 13; 這裡因為下面的age被封裝起來了。對其不可見。所以無法呼叫
        h.name = "福福福福福";
        h.height = 200;
        
        Person4 p4 = new Person4();
        p4.setAge(14);
        p4.setName("我你大爺!");
        System.out.println(p4.getName());
        System.out.println(p4.getAge());
        
    }
}


class Woman extends Human{
    void sayAge2() {
        // System.out.println(age); 子類也無法使用父類的私有屬性和方法。
    }
}