封装以减少耦合

封装允许你对类进行内部更改,而不会影响调用该类的任何代码。这减少了耦合,或者任何给定的类依赖于另一个类的实现。

例如,让我们改变前一个例子中 Angle 类的实现:

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

    private Angle(){}
}

此类的实现已更改,因此它仅存储角度的一个表示,并在需要时计算另一个角度。

但是,实现发生了变化,但界面却没有。如果一个调用类依赖于访问 angleInRadians 方法,则需要将其更改为使用新版本的 Angle。调用类不应该关心类的内部表示。