安全程式設計(十七)- Java的getter() 和 setter()
1.前言
我們在學習時,參考別人專案時會碰到像這樣的一些程式碼:
package cn.edu.nuist.testSystem.beans; import java.io.Serializable; /**資料庫User表的bean類 * 用以表示該表的各個欄位資訊 * @author Timlong * @version V1.0 */ @SuppressWarnings("serial") public class Users implements Serializable{ private int id; private String username; private String password; private boolean active; /** * 該類的無參構造方法 */ public Users() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return username; } public void setUserName(String userName) { this.username = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isActive() { return active; } public void setActive(boolean active) { this.active = active; } /** * 返回該bean的資料資訊 * @param none * @return 資料資訊字串 */ public String toString(){ String re; re = "ID: " + this.getId() + "\nUser Name: " + this.getUserName() + "\nPassword: " + this.getPassword() + "\nIs Actived? " + this.isActive(); return re; } }
裡面有一系列的變數,還有修飾符修飾,還有一系列的getter()和setter()方法,今天,我們就來談一談這些東西!
2.具體概念
java有三大特性:封裝、繼承和多型!今天要講的就是封裝!
首先,屬性可用來描述同一類事物的特徵,方法可描述一類事物可做的操作。封裝就是把屬於同一類事物的共性(包括屬性與方法)歸到一個類中,以方便使用。
2.1概念:封裝也稱為資訊隱藏,是指利用抽象資料型別將資料和基於資料的操作封裝在一起,使其構成一個不可分割的獨立實體,資料被保護在抽象資料型別的內部,儘可能地隱藏內部的細節,只保留一些對外介面使之與外部發生聯絡。系統的其他部分只有通過包裹在資料外面的被授權的操作來與這個抽象資料型別交流與互動。也就是說,使用者無需知道物件內部方法的實現細節,但可以根據物件提供的外部介面(物件名和引數)訪問該物件。
2.2好處:(1)實現了專業的分工。將能實現某一特定功能的程式碼封裝成一個獨立的實體後,各程式設計師可以在需要的時候呼叫,從而實現了專業的分工。(2)隱藏資訊,實現細節。通過控制訪問許可權可以將可以將不想讓客戶端程式設計師看到的資訊隱藏起來,如某客戶的銀行的密碼需要保密,只能對該客戶開發許可權。
而我們在設定變數的屬性時,我們通常會對資料進行封裝,這樣就可以增加了資料訪問限制,增加了程式可維護性。而實現方法就是:用private去修飾一個變數,然後再用setter方法去設定該變數的值,然後在用getter方法去呼叫該變數的值。
用setter來改變資料成員的值時,操作必須由這個物件自己來觸發
用public來改變資料成員的值時,操作可以由任何物件來觸發
這是面向物件的封裝,總之就是自己的資料成員,只對自己可見,也只有自己才能改變其值
物件的封裝性,
private的只有物件自己才可以訪問,其他任何物件不行,包括它的子類和父類。安全性高,其他物件只能通過它的public方法,set,get來獲取或設定原物件的private屬性。
public其他物件可以訪問,安全性就不高了。
/*問題:在java 類中使用getter和setter的好處?
* 定義為private 是為了實現資料的隱藏和封裝;而set get 方法提供了類與外部的介面;在大型軟體中這是很有必要的,它有利於程式碼的維護。
舉個例子,一個父類有多個子類(甚至還有間接子類),程式程式碼中,子類是不能直接訪問父類的private屬性的;這時提供的set get方法是很有必要的。誠然,若將父類的屬性宣告為protected,在子類中就可以直接訪問了,但是這種方法破壞了資料的隱藏和封裝原則,關鍵是不利於程式碼的維護,
如果父類中的一個屬性改名了,那麼在子類中用到該屬性名的程式碼,要發生大範圍的修改,而前面的private,set,get方法就比較好,對程式碼只需小範圍的修改,一般都是這麼用的,這是一個良好的程式設計習慣*/