一、本單元知識點概述
(Ⅰ)知識點概述

二、本單元教學目標
(Ⅰ)重點知識目標
1.物件的封裝
2.封裝的使用
3.構造方法的定義格式
(Ⅱ)能力目標
1.掌握物件的封裝
2.掌握封裝的使用流程
3.掌握定義構造方法
三、本單元知識詳講
9.1 封裝
9.1.1 封裝概述★★★
-
概述:面向物件編程語言是對客觀世界的模擬,客觀世界里成員變數都是隱藏在物件內部的,外界無法直接操作和修改,封裝可以被認為是一個保護屏障,防止該類的代碼和資料被其他類隨意訪問,要訪問該類的資料,必須通過指定的方式,適當的封裝可以讓代碼更容易理解與維護,也加強了代碼的安全性,
-
原則:將屬性隱藏起來,若需要訪問某個屬性,提供公共方法對其訪問,
9.1.2 封裝的步驟★★★
-
使用
private關鍵字來修飾成員變數, -
對需要訪問的成員變數,提供對應的一對
getXxx方法 、setXxx方法,
9.1.3 private的含義★★★★
-
private是一個權限修飾符,代表最小權限,
-
可以修飾成員變數和成員方法,
-
被private修飾后的成員變數和成員方法,只在本類中才能訪問,
9.1.4 private的使用格式★★★★
private 資料型別 變數名 ;
-
使用 private 修飾成員變數,代碼如下:
1 public class Student { 2 private String name; 3 private int age; 4 }
-
提供 getXxx 方法 / setXxx 方法,可以訪問成員變數,代碼如下:
1 public class Student { 2 private String name; 3 private int age; 4 public void setName(String n) { 5 name = n; 6 } 7 public String getName() { 8 return name; 9 } 10 public void setAge(int a) { 11 age = a; 12 } 13 public int getAge() { 14 return age; 15 } 16 }
9.1.5 封裝的優化★★★★★
-
this關鍵字
我們發現 setXxx 方法中的形參名字并不符合見名知意的規定,那么如果修改與成員變數名一致,是否就見名知意 了呢?代碼如下:
1 public class Student { 2 private String name; 3 private int age; 4 public void setName(String name) { 5 name = name; 6 } 7 public void setAge(int age) { 8 age = age; 9 } 10 }
經過修改和測驗,我們發現新的問題,成員變數賦值失敗了,也就是說,在修改了setXxx() 的形參變數名后,方 法并沒有給成員變數賦值!這是由于形參變數名與成員變數名重名,導致成員變數名被隱藏,方法中的變數名,無 法訪問到成員變數,從而賦值失敗,所以,我們只能使用this關鍵字,來解決這個重名問題,
-
this的含義
this代表所在類的當前物件的參考(地址值),即物件自己的參考,
記住 :方法被哪個物件呼叫,方法中的this就代表那個物件,即誰在呼叫,this就代表誰,
-
this使用格式
this.成員變數名;
使用 this 修飾方法中的變數,解決成員變數被隱藏的問題,代碼如下:
1 public class Student { 2 private String name; 3 private int age; 4 public void setName(String name) { 5 //name = name; 6 this.name = name; 7 } 8 public String getName() { 9 return name; 10 } 11 public void setAge(int age) { 12 //age = age; 13 this.age = age; 14 } 15 public int getAge() { 16 return age; 17 } 18 }
9.2 構造方法
9.2.1 構造方法概述★★★
當一個物件被創建時候,構造方法用來初始化該物件,給物件的成員變數賦初始值 .
小貼士:無論你與否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個無引數構造方法, 一旦自己定義了構造方法,Java自動提供的默認無引數構造方法就會失效
9.2.2 構造方法的定義格式★★★
修飾符 構造方法名(引數串列){ // 方法體 }
構造方法的寫法上,方法名與它所在的類名相同,它沒有回傳值,所以不需要回傳值型別,甚至不需要void,使用 構造方法后,代碼如下:
1 public class Student { 2 private String name; 3 private int age; 4 // 無引數構造方法 5 public Student() {} 6 // 有引數構造方法 7 public Student(String name,int age) { 8 this.name = name; 9 this.age = age; 10 } 11 }
注意事項
-
如果你不提供構造方法,系統會給出無引數構造方法,
-
如果你提供了構造方法,系統將不再提供無引數構造方法,
-
構造方法是可以多載的,既可以定義引數,也可以不定義引數,
四、本單元知識總結
1.物件的封裝2.封裝的使用
3.構造方法的定義格式
4.定義構造方法的注意事項
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305845.html
標籤:其他
上一篇:Scheme宏基礎入門(轉載)
