概述
物件導向程式語言是客觀世界的模擬,客觀世界裡成員變數都是隱藏在物件內部的,外界無法直接操作和修改。封裝可以被認為是一個保護屏障,防止該類別的程式碼和資料被其他類別隨意存取。要存取該類別的數據,必須透過指定的方式。
適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。
原則
將屬性隱藏起來,若需要存取某個屬性,提供公共方法對其存取。
封裝的步驟
使用 private 關鍵字來修飾成員變數。
對需要存取的成員變量,提供對應的一對 getXxx 方法 、 setXxx 方法。
java學習影片推薦:java線上教學
封裝的操作—private關鍵字
private的意思:
private是一個權限修飾符,代表最小權限,可以修飾成員變數和成員方法,被private修飾後的成員變數和成員方法,只在本類別中才能存取。
private的使用格式
private 数据类型 变量名 ;
使用private 修飾成員變量,程式碼如下:
#提供getXxx 方法/ setXxx 方法,可以存取成員變量,程式碼如下:#封裝優化1——this關鍵字
##我們發現setXxx 方法中的形參名字並不符合見名知意的規定,那麼如果修改與成員變數名稱一致,是否就見名知意了呢?程式碼如下:
經過修改和測試,我們發現新的問題,成員變數賦值失敗了。也就是說,在修改了 setXxx() 的形參變數名後,方 法並沒有給成員變數賦值!這是由於形參變數名與成員變數名重名,導致成員變數名被隱藏,方法中的變數名,無法存取成員變量,從而賦值失敗。所以,我們只能使用this關鍵字,來解決這個重名問題。
this的意思this代表所在類別的目前物件的參考(位址值),即物件自己的參考。
記住 :方法被哪個物件調用,方法中的this就代表那個物件。即誰在調用,this就代表誰。this使用格式:
this.成员变量名;
public class Student { private String name; private int age; public void setName(String name) { //name = name; this.name = name; } public String getName() { return name; } public void setAge(int age) { //age = age; this.age = age; } public int getAge() { return age; } }
#提示:方法中只有一個變數名稱時,預設也是使用 this 修飾,可以省略不寫。
當一個物件被建立時候,建構方法用來初始化該對象,為物件的成員變數賦初始值。
提示:無論你與否自訂建構方法,所有的類別都有建構方法,因為Java自動提供了一個無參數建構方法, 一旦自己定義了建構方法,Java自動提供的預設無參數構造方法就會失效。
建構方法的定義格式:######建構方法的寫法上,方法名稱與它所在的類別名稱相同。它沒有傳回值,所以不需要傳回值類型,甚至不需要void。使用建構方法後,程式碼如下:##################注意事項:#########如果你不提供建構方法,系統會給予無參數構造方法。 ######如果你提供了建構方法,系統將不再提供無參數建構方法。 ######建構方法是可以重載的,既可以定義參數,也可以不定義參數。 ###标准代码——JavaBean
JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 set 和 get 方法。
编写符合 JavaBean 规范的类,以学生类为例,标准代码如下:
测试类,代码如下:
public class TestStudent { public static void main(String[] args) { //无参构造使用 Student s= new Student(); s.setName(" 柳 岩 "); s.setAge(18); System.out.println(s.getName()+"‐‐‐"+s.getAge()); //带参构造使用 Student s2= new Student(" 赵 丽 颖 ",18); System.out.println(s2.getName()+"‐‐‐"+s2.getAge()); } }
推荐相关文章教程:java语言入门
以上是java物件導向-封裝的詳細內容。更多資訊請關注PHP中文網其他相關文章!