標籤:使用 ar strong 資料 sp 代碼 on c ad
1.類和對象
物件導向技術,也簡稱OOP。前面說了,它是一個編程思想,既然是思想,它就適用於任何支援物件導向編程的語言。雖然不同的物件導向語言都有其各自的特點,但是萬變還是不離其宗的。
1.什麼是類?
首先瞭解幾個概念,什麼是類?這個其實很容易理解,在現實中我們常說,物以類聚、人以群分。這裡的類,和我要解釋的類,概念上是一樣的,都是現實中一些擁有共同屬性、特徵的事物。就像,人類,犬類,貓類等,它們通常都是抽象的描述了,一類事物,不是具體指的指某一個,人啊,狗啊,貓啊,這樣的,而是它們的統稱。
定義格式:
class <類名>{
//類中的成員
}
類名的定義,使用帕斯卡命名法。類的定義是用 class關鍵字
2.什麼是對象?
知道了類之後,對象就很容易理解了,它是由類所產生的一個具體的執行個體。比如人這個類,是人類的統稱,而用人這個類,所產生的對象,指的是具體的某一個人,這個對象具有人這個類的一切屬性,因為對象是類的具體的執行個體。
代碼示範,如何在一個類中產生另一個類的對象:
//先定義一個類
class Person{
//類中的成員
}
class Program{
static void Main(string[] args){
Person <對象名>;//聲明了類的變數,但是沒有執行個體化
<對象名> = new Person();//調用類中空參數的建構函式,執行個體化
}
}
類的執行個體化,也就是產生類的對象,只是叫法不一樣而已。類的執行個體化用到了new關鍵字,調用類的建構函式,由於我的Person類,沒有寫建構函式,編譯器在編譯的時候會為我們自動的添加一個空參數的建構函式,如果你寫了,編譯器,就不會加了,就用你的建構函式。
兩行代碼也可以簡寫成一行,具體看需要;
3.類和對象的關係
一個類能夠產生無數的對象,而一個對象只能是一個類所產生的。一個類可以有無數個執行個體,但是一個樣本肯定只對應產生它的一個類;
2.屬性、欄位和方法
這些東西,都是類中的成員,剛開始的時候,我十分的迷惑,屬性這個東西,常常以為它也是變數,但是後來才清楚,它是用來維護欄位的。
1.什麼是欄位?
欄位就是用來描述類的特徵的,比如說人這個類中,人都有姓名,年齡,性別等共同的特徵,這些特徵我們可以用欄位來定義。
定義:
<許可權修飾符> <靜態修飾符> <欄位類型> <欄位名>;
在定義的時候,也可以直接的初始化。私人的欄位採用駝峰命名法,共有的則是帕斯卡命名法,但絕大多數都是私人的。許可權預設是私人的。靜態修飾符,選擇性的加入;
欄位也可以被readonly關鍵字,所修飾。被它修飾的欄位,只可以在建構函式和定義的時候初始化。
2.屬性
個人認為呢,屬性是欄位的修改器。因為物件導向有個特性,那就是欄位,要的許可權,盡量要私人起來,不讓隨便的修改,而屬性,則為我們提供了,綠色通道,可以使用它來修改欄位中值。
定義:
public <傳回值類型><屬性名稱>{
set{
<欄位> = value;
}
get{
return <欄位>;
}
}
這是一個標準的屬性定義方法。兩個欄位是同一個欄位,這看起來有點像方法,但是它沒有參數列表,這是最大的區別。並且它的許可權必須是非私人的,不然就失去了,它存在的意義了;如果省略其中的一個,就變成了唯讀,或唯寫的屬性了;
自動屬性定義格式:
public <屬性名稱>{set;get;}
建立自動屬性,我們都不用建立要修改的欄位,而是直接建立屬性,就可以了,其它的編譯器在編譯時間都會為我們完成。但是這樣有一個限制,就是不能定義唯讀,或唯寫的屬性;
3.方法
方法也就是我們之前講的函數,只是叫法不一樣,它是類中的成員。
3.建構函式深入
建構函式其實也是可以重載的,和普通的函數重載一樣,函數名相同,參數列表不同,就可以了。建構函式的重載可以為我們提供不同的初始化類的執行個體的方法。另外建構函式,前面也提到了,如果沒有寫建構函式,編譯器會為我們加,如果寫了,就用你的。如果你唯寫了一個幾個參數的建構函式,那麼類在初始化的時候,就只能傳入那幾個固定的參數,這樣會相當的有限制,所以通常情況下,我們都是寫一個空參數的建構函式,和若干個帶參數的建構函式;
此外還有靜態建構函式,和靜態類,下面將詳解
1.什麼是靜態建構函式?
它和建構函式的定義就有點區別了,雖然同樣都是在類中,但是它是這樣定義的:
static{
//靜態建構函式代碼塊
}
它的作用呢,主要是初始化,類中的靜態變數,它是優先於對象的,在載入類,產生對象的時候,首先會調用靜態建構函式;
2.靜態類
顧名思義,使用static所修飾的類,它有一個特點,就是它裡面的成員,必須都是靜態,且它不能被執行個體化。既然不能被執行個體化,那麼也就是不需要建構函式,但是它可以有一個靜態建構函式。
4.靜態成員
之前也講到了,靜態成員。像靜態函數,變數啊。只是說了,它的作用,並沒有解釋究竟是為什麼。
概念
靜態是相對於動態來說的,靜態也就是固定不變的意思。一旦一個類中定義了一個靜態成員,你就要想到,它和類綁定了。無論這個類產生了,多少個對象,在使用到這個類的靜態成員的時候,使用的都是這個類中的這個成員。而不是哪一個單獨對象中的靜態成員。因為靜態成員屬於類,而不副屬於某一個對象,只要是類所產生的對象,都可以訪問到類中的靜態成員;
5.物件導向的特性
物件導向擁有三個非常關鍵的特性:封裝,繼承和多態性;還有像抽象類別,和介面這樣重要的特性;
1.封裝性
前面我在定義類中成員的標準格式中,都講到了,許可權修飾符。而許可權修飾符就是封裝性的最主要體現之一。封裝性的意思是說,在保證程式正常啟動並執行基礎之上,盡量的減小類中成員的存取權限大小。
許可權修飾符
private:許可權最小(預設許可權),用它定義的成員,只能在本類中被訪問;
protected:只能被該類的衍生類別所訪問,後面會講到什麼是衍生類別;
internal:內部許可權,一個項目中的類可以訪問;
public:許可權最大,任何地方都可以訪問,通常用在屬性上;
2.繼承性
繼承性在物件導向中極其的重要,可以最大程度的為我們,減少重複代碼。它的意思是指,一個類可以從一個類中繼承它裡面成員。就像兒子繼承老子的遺產一樣。
3.多態性
多態性是建立在繼承性的基礎之上的,它可以使程式更加的靈活。它的意思是說一個變數可以有多種狀態,不僅可以訪問它的本身,也可以訪問到它的基類;
4.抽象類別
抽象的意思是指含糊不清,描述一個事物,說的十分籠統。抽象類別就是這樣的,在現實中的一些事物,並不都是那麼具體的。所以程式設計中抽象類別,就顯得很有必要。就比如說車這個類,它就十分的抽象,它又可以派生出汽車類,火車類啊。。,像這種十分抽象的事物,而且天生就是要被用來繼承的類,稱為抽象類別。
特點:類中可以有抽象的成員,也可以有不抽象的。一個類繼承了它之後,如果沒有覆蓋掉它裡面抽象的成員,那麼那個類,就還是抽象的。只有抽象成員全部覆蓋,那個類才不算抽象;
5.介面
介面是一種協議,它為我們的程式提供一個標準。就像是USB介面一樣,它是一種傳輸資料的協議,只要遵守我的傳輸協議,優盤啊,讀卡機啊,手機啊都可以串連電腦。這對程式的後期維護來說意義重大,如果程式需要升級,我們就不用再刪除重寫代碼,我們可以在原有代碼的基礎之上,添加拓展介面,實現無縫的程式升級。
這篇文章大多是文字性的概念性總結,大家先留個印象,下一篇更多的是代碼示範。
黑馬程式員_物件導向基礎