封裝以保持不變數

一個類有兩個部分:介面和實現。

介面是類的公開功能。它的公共方法和變數是介面的一部分。

實現是類的內部工作。其他類不應該知道類的實現。

封裝是指從該類的任何使用者隱藏類的實現的做法。這允許類對其內部狀態做出假設。

例如,將此類表示為 Angle:

public class Angle {
    
    private double angleInDegrees;
    private double angleInRadians;
    
    public static Angle angleFromDegrees(double degrees){
        Angle a = new Angle();
        a.angleInDegrees = degrees;
        a.angleInRadians = Math.PI*degrees/180;
        return a;
    }
    
    public static Angle angleFromRadians(double radians){
        Angle a = new Angle();
        a.angleInRadians = radians;
        a.angleInDegrees = radians*180/Math.PI;
        return a;
    }
    
    public double getDegrees(){
        return angleInDegrees;
    }
    
    public double getRadians(){
        return angleInRadians;
    }
    
    public void setDegrees(double degrees){
        this.angleInDegrees = degrees;
        this.angleInRadians = Math.PI*degrees/180;
    }
    
    public void setRadians(double radians){
        this.angleInRadians = radians;
        this.angleInDegrees = radians*180/Math.PI;
    }
    private Angle(){}
}

該類依賴於基本假設(或不變數 ): angleInDegrees 和 angleInRadians 始終同步。如果類成員是公開的,則不能保證兩個角度表示是相關的。