如果一個 class 的 field 都是 public,這樣全部的開發者都能修改該 field,會造成混亂。在 OOP 的設計方式中,會傾向提供 public 的訪問方法 (getter/setter) 來取代 public field。
public class Point {
public double x;
public double y;
}
public class Point {
private double x;
private double y;
public double getX() { return x; }
public double getY() { return y; }
public void setX(double x) { this.x = x; }
public void setY(double y) { this.y = y; }
}
如果 class 本身是 package-private 或是 private inner class 的話,就不一定要 private field,這是可接受的,因為 class 本身就已經有基本的訪問權限設定。java.awt 裡的 Point 及 Dimension 就是將 field 設為 public,是反面教材。// java.awt.Point source code
public class Point extends Point2D implements Serializable {
public int x;
public int y;
...
}
轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2020/07/effective-java-16-public-class-field.html
沒有留言:
張貼留言