java 對類中的屬性使用set/get方法的作用
經常看到有朋友提到類似:對類中的屬性使用set/get方法的作用?理論的回答當然是封閉性之類的,但是這樣對我們有什麼作用呢?為什麼要這樣設計?我直接使用屬性名來訪問不是更直接,程式碼更簡潔明瞭嗎?下面我們就來介紹下為什麼要使用set/get方法來代替直接訪問屬性。
1.靈活性
比如我們有一個Person類,我們給它設定一個屬性name,但是我們希望在取名字的時候,不是隻顯示名字,而是把名字按我們的要求輸出,比如”我的名字叫XX”,程式碼如下:
public class Person { private String name; public String getName() { return "我的名字叫" + name; } public void setName(String name) { this.name = name; } }
如上程式碼,以後我們只要定義一個person物件,並給他setName(xx),再getName的時候,就會顯示我的名字叫XX。在實際業務中還可以有更靈活的運用,這裡就不舉例了。
2.安全性。
比如我們的作業系統在新建使用者或在共享檔案的時候,經常會提示對針對某個使用者的許可權是什麼,是隻讀還是隻寫還是可讀寫,這裡的讀寫就好比get/set。對於類來說,如果不使用set/get方法,直接用public定義某個屬性,那麼這個屬性是可讀可寫的,如果你希望一個類的某個屬性是隻能讀取,不能寫入的時候,上面用public定義某個屬性就不能滿足了,但是我們可以使用private定義屬性,再定義一個get方法,但是不定義set方法來實現。反之,只定義set,不定義get則表示該屬性是隻寫不能讀的。舉個簡單的例子,如下程式碼。
public class Circle { private double radius; private double pai = 3.14; public double getPai() { return pai; } public void setRadius(double radius) { this.radius = radius; } /** * 計算周長 */ public double getC() { return 2*pai*radius; } }
我們定義了一個圓類,定義了屬性半徑和pai,半徑我只提供寫的方法,但是不提供讀,而pai只提供讀,但不能寫,並提供了一個計算周長的方法getC。在實際專案中,對一些類的設計時,嚴謹的設計是要考慮哪些類是隻讀或是隻寫的。
set/get的方法作用當然不只這些,實際專案中的用法有很多,比如對某個類升級,有一個屬性的Type變化了,只要set/get的Type不變就不會影響到以前的程式碼。更多的用法只能在使用中多體會了。