本來不想寫這個的,太基礎了,不過為了整個學習筆記的完備性還是簡單寫幾筆給自己留着看。
1.存取方法也就是所謂的getter and setter,對于類中的private成員提供對外的接口,這樣的設計使得最後的在程式修改時隻需要修改這些setter and getter,而不必工程中修改所有與這個成員相關的東西,這些setter和getter不單單是為了給類外的對象使用的,内部使用時也盡可能使用,以提高程式的可修改性。而private類成員和方法是實作面向對象封裝特性的重要方法,相關的控制符權限級别在我前些時的一篇文字中()中有一個表和相關描述可供參考,封裝的好處在于:
2. 執行個體:一個比較有趣的例子是husband和wife的封裝例子,仔細看就會發現,Man類沒有提供getWife的方法,這是以為男人不想讓自己的妻子被外界通路。封裝可以吧一個對象的屬性私有,而提供一些可以被外界通路的屬性的方法,比如說,name屬性,Man和Woman類都有相應的get和 set方法,外界都可以通過這些方法通路和修改, 同時對一些改對象不想讓外界通路的屬性,就不提供其方法,比如說Man的wife屬性,就沒有get方法, 外界是不能帶到Man類的wife屬性的。
public class Man
{
//對屬性的封裝,一個人的姓名,年齡,妻子都是這個對象(人)的私有屬性
private String name;
private int age;
private Woman wife;
//對改人對外界提供方法的封裝,可以設定妻子,姓名,年齡也可以獲得男人的姓名和年齡
public void setWife(Woman wife)
{
this.wife = wife;
}
public String getName()
{
return name;
}
public void setName(String name)
this.name = name;
public int getAge()
return age;
public void setAge(int age)
this.age = age;
}
public class Woman
//屬性封裝
private String name;
private int age;
private Man husband;
//方法封裝
this.name = name;
return age;
this.age = age;
public Man getHusband()
return husband;
public void setHusband(Man husband)
this.husband = husband;
3.優點:
1)可以改變内部實作,除了該類的方法之外,不會影響其他代碼。
例如,如果将對于名字的存取方法的而實作改為firstName + ' ' + lastName,對于這點改變,程式的其他部分完全不可見。
2)存取方法可以執行錯誤檢查,然而直接對域進行指派将不會進行這些處理。例如,setAge方法可以檢查年齡是否小于0。
4.注意:不要編寫傳回引用可變對象的 getter方法。由于傳回引用可變對象的方法會傳回一個對private成員的引用,對這個成員的修改可以繞過setter方法,這樣就會破壞封裝性,因為封裝性要求不能在别的類中修改本類的私有域,但是若傳回一個可變對象的引用,則别的類調用本類的getter就可以修改,這就破環了封裝。解決方法是,如果需要傳回一個可變對象的引用,應該首先對它進行克隆(clone)。