需要記得:1.在1個專案中 不能 直接訪問 另外的1個專案中的類.
2.在為物件的字段賦值的時候.語法上只要賦值的資料和字段的型別一致就可以.
但是絕大多數情況下.還要考慮實際情理.
比如:人物件的age欄位 表示1個人的年齡 是int型別
語法上只要是1個int型別的資料都可以賦值.
但是情理上. 人物件的age 0-130歲.
3. 為了情理,我們有以下的需求
為物件的字段賦值的時候 要求這個值 符合情理. 而不是僅僅滿足語法.
這個需求是寫類的那個人的需求 而不是建立物件的那個人的需求.
解決方案:
a. 目的: 當外界為物件的字段賦值的時候.可以對這個值做1個邏輯驗證.
b. 步驟
1). 要保護的字段必須私有化. 因為一旦public 那麼外界就可以直接訪問這個欄位.
就可以直接為這個賦值,無法阻攔.
2). 但是一旦私有化,外部1點機會都沒有.
那麼我們在類中提供1個為被保護的字段賦值的方法. setxx()
這個方法接收1個引數,這個引數就是外界要賦值給字段的值.
在方法的內部 對這個值進行邏輯驗證. 符合邏輯就將值賦值給字段.
不符合邏輯 我們就做預設處理.
3). 在外界如果要為物件的字段.需要呼叫這個方法才可以為字段賦值.
4). 外界如果想要得到保護的字段的值,那麼再寫1個getxx方法 用於專門返回被保護的字段的值
外界通過呼叫這個方法 得到欄位的值.
c. set 設定
get 得到.
d. 有同學犯錯:
1). 被保護的字段一定要私有化.
2). 在賦值的方法中.是要判斷使用者準備賦值給字段的資料是否符合規範. 而不是判斷欄位的值.
4. 在方法中可以定義1個區域性變數的名稱和成員變數的名稱相同 這是可以滴.
為什麼? 因為成員變數跟隨著物件一起開闢在堆空間中.
而區域性變數 在方法被呼叫的時候 開闢在棧空間中
他們就算同名 1個在堆 1個在棧 是不會有任何影響的.
如果在方法中直接訪問這個同名成員成員的值 那麼訪問的是區域性變數的值.
如果我們就是要訪問這個同名的成員變數. 這個時候可以通過this關鍵字來點出這個同名成員.
this代表:當前物件. this所在的方法屬於哪個物件,那麼this就代表這個物件.
總結:1. 當方法中有1個區域性變數的名稱和字段的名稱相同.如果我們要訪問欄位.必須加上this
2. 其他情況下: 寫不寫this關鍵字 指的都是字段.
但是建議: 在方法中如果我們訪問的是物件的成員 建議加上this 方便**的閱讀
為什麼要保護字段??
希望對物件的字段賦值,賦值的這個資料在情理範圍之內。
使用方法保護欄位.
a. 將被保護的字段私有化.
b. 提供1個set方法 專門用於為被保護的字段賦值.
在這個方法中驗證 賦值 的資料是否符合規範.
如果符合就賦值 如果不符合做預設處理.
c. 再提供1個get方法 專門用於返回被保護的字段的值.
1.屬性
作用:和get,set方法一樣的,是用來保護字段,只不過屬性的語法更簡潔。
2.屬性的語法:
訪問修飾符 屬性的型別 屬性的名稱
set{}
}3.如何操作?
可以向操作字段那樣,通過賦值符號直接賦值,或者直接寫上屬性取值。
1.建構函式/構造方法 : 建構函式是乙個特殊的方法。
2.建構函式的語法:
a.訪問修飾符大都數情況下是public。
b.建構函式沒有返回值,連void都不要寫。
c.建構函式的名稱與所在的類的名稱一致。
3.方法的特點在於,如果方法不呼叫,那麼方法中的**不會被執行。
建構函式不能被程式猿手動呼叫。
我們發現,在建立物件的時候,後面有乙個小括弧。
小括弧的作用:
a.改變運算的優先順序
b.定義方法
c.呼叫方法
d.強制型別轉換
e.呼叫建構函式
總結:建構函式在建立雖然不能直接呼叫,可是可以通過new關鍵字自動呼叫。
4.注意:
a.建構函式的名稱一定是與所在的類的類名相同。
b.建構函式與普通的方法的區別
1)語法上的區別
2)執行時機
5.建構函式其實就是乙個特殊的方法
特殊的地方
1)語法上的特殊
2)執行時機的特殊
6.普通的方法可以帶引數,建構函式也是可以帶引數的。
在建立物件的時候,後面的小括弧是在呼叫物件的建構函式,必須在小括弧中為建構函式定義引數。
在建立物件的時候,必須要呼叫建構函式。
7.建構函式是可以過載的,這就意味著在物件中可以載入多個方法。
8.建構函式的作用:
特點:在於建立物件的時候自動呼叫。
作用:如果我們有一段**希望在建立物件的同時就執行,那麼我們就可以將這段**放在建構函式中。
但是,一般情況下,不建議在建構函式中寫一些特別消耗時間和效能的**。
絕大多數情況下,程式設計師使用建構函式來初始化當前的屬性的值。
9.如果我們沒有寫建構函式,那麼c#編譯器在編譯的時候,會自動的為這個類生成乙個無引數的,空方法體的建構函式。
所以我們這個時候才可以呼叫無引數的建構函式來建立物件。
編譯器自動生成的這個無引數的建構函式來建立物件。
編譯器自動生成的這個無引數的建構函式,我們就把它稱為「隱式建構函式」;
一旦程式設計師為這個類寫了乙個建構函式,那麼編譯器就不會自動生成 「隱式建構函式」了。
如果就是希望存在哪個無引數,,那麼就需要重新建立乙個建構函式。
10.建構函式式不能被程式設計師手動呼叫,在普通的方法不能呼叫建構函式,但建構函式可以呼叫普通的方法。
建構函式之間可以相互呼叫
物件導向(OOP)基礎
1 物件導向特性 封裝 繼承 多型。2 oop概念 類 class 物件 object 字段 field 描述類的某些性質。屬性 attribute 通過方法訪問和操作字段。方法 method 定義類的行為。3 類的建立 修飾符 class 類名 class computer 4 物件的宣告 例項化...
物件導向(基礎oop)之進入繼承
1.繼承的目的雖然是讓子類去擁有父類的成員,但是繼承一定不要亂繼承 不要僅僅是為了去得到某1個類的成員而去繼承.滿足繼承的關係 當滿足is a 的關係的時候,就可以繼承.當子類是1個父類的時候 那麼就可以繼承.student person class student person 麻雀 鳥 汽車 交...
Python基礎 物件導向OOP
魔法函式 物件導向概述 幾個名詞 類和物件的概念 類的內容,應該具有兩個內容 類的基本實現 如何宣告乙個類 可以通過缺省內置變數檢查類和物件的所有成員 類的所有成員檢查 定義乙個學生類,用來形容學生 class student 乙個空類,pass代表跳過 pass必須有 pass 定義乙個物件 zs...