繼續更新。。。接下來就是物件導向的知識了
1、物件導向:概念:使用物件導向的思想進行程式設計可以讓的程式變得擴充套件性更高,便於維護;
我們在現實生活中去描述乙個人的時候,通過描述這個人的特徵和行為。
我們在程式設計當中,去描述乙個物件的時候,通過描述這個物件的屬性和方法。
物件時具體的,不是抽象的,一定是看得見摸得著的。
我們把一些具有相同屬性和方法的物件進行進一步的抽象,提取出了"類"這個概念。
類就是模子,確定了物件將要擁有的屬性和方法。
2、類:
語法:[訪問修飾符] class 類名
訪問修飾符:public,公開的,公共的,在哪都可以訪問
class:是我們宣告類的關鍵字
類名:要符合pascal命名規範
成員:字段、屬性、方法。
總結:1)、我們在寫乙個類的時候,需要在專案中新建乙個類檔案。
2)、在類中,預設的訪問修飾符是private,表示私有的,只能在當前類的內部訪問。
3)、在類中,我們現在可以寫3種成員,字段,屬性和方法
4)、我們寫好了乙個類之後,需要建立這個類的物件,叫做類的例項化
5)、類是不佔記憶體的,但是物件時佔記憶體的。
6)、自定義類,屬於引用型別,我們的物件儲存在記憶體的堆中。
3、屬性:
1)、我們要求將類中所有的字段都標記為private,但是標記為private之後,類中的字段在外界沒有辦法被訪問。
2)、並沒有辦法對字段的非法值進行處理
屬性的出現解決了上面兩個問題:
語法:[訪問修飾符] 屬性型別 屬性名
set{}
}屬性的出現了保護了字段,對字段的取值和設定進行了限定。
1)、在賦值的時候進行判斷,也就是在set方法中
2)、在取值的時候進行判斷,也就是在get方法中
屬性中既有get也有set,我們叫做可讀可寫屬性。
只有get叫做唯讀屬性,意味著我們只能給屬性取值,而不能對屬性賦值。
只有set叫做只寫屬性,意味著我們只能給屬性賦值,但是不能對屬性取值。
4:關於this關鍵字的含義:
1)、代表當前這個類的物件。
2)、顯示的呼叫本類的建構函式。
4.1:成員變數和區域性變數
區域性變數:方法中的成員都是區域性變數。
成員變數:類中的變數
區域性變數的作用域就是當前方法,而成員變數的作用域當前類。(上面的this很能說明這個)
小總結:
字段:儲存資料
屬性:保護字段,通過兩個方法 get、set
方法:描述這個物件的行為
欄位跟屬性的關係:字段就是女人 屬性就是男人(男人一般在外打交道,女人嘛。。。你懂得)
5、建構函式:建構函式其實就是乙個特殊的方法,用來初始化物件。
eg:[public] class person
[public] person()
特殊有二:
1)、建構函式的名稱跟類名一樣。
2)、建構函式沒有返回值。連void都沒有。
注:在類中,如果你不指定其他的建構函式,則會預設有乙個無引數的建構函式。
當你寫了乙個新的建構函式後。不管這個新寫的建構函式有引數還是沒有引數,都會把原來那個
預設的無引數的建構函式乾掉。
5.1關於new關鍵字的含義:
1)、在堆中開闢空間
2)、在開闢的堆空間中建立物件
3)、呼叫物件的建構函式進行初始化
4)、隱藏父類的成員
6、靜態和非靜態的區別
1)、被static標記的成員叫做靜態成員,沒有被static標記的成員叫做例項成員或者非靜態成員。
2)、在乙個非靜態類中,既能出現靜態成員,也能出現非靜態成員。
3)、非靜態成員需要使用物件去呼叫,而靜態成員需要使用類名去呼叫。
4)、為什麼物件不能去呼叫靜態成員?
靜態成員是隨著程式的載入,就已經在記憶體中開闢空間的。
5)、靜態方法中只允許使用靜態成員,但是非靜態方法中既可以使用靜態成員也可以使用非靜態成員。
6)、靜態類中所有的成員都必須是靜態成員。
7)、靜態類不允許被建立物件,因為沒有實際意義
6.1:為什麼要使用靜態類?
1)、當這個類被用作工具類的時候,可以考慮寫成靜態類。
console con=new console();
con.writeline();
console.writeline();
2)、靜態成員在整個專案中是資源共享的。
7、訪問修飾符
public:公開的公共的,在哪都可以訪問。
private:私有的,只能在當前類的內部訪問,出了這個類就訪問不到了
internal:表示只能在當前專案的內部進行訪問,出了這個專案就訪問不到了。
(總和5個訪問修飾符 基本上用這3個就夠了)
8、特殊的字串
字串對於我們而言是乙個非常特殊的型別,特殊原因有二:
1)、字串不可變性,我們每次對字串重新賦值、拼接等操作,都會在記憶體中產生乙個新的例項。
string s1="張三";
s1="李四";
2)、字串可以看做是char型別的唯讀陣列
8.1:字串常用的方法:
tochararray():將字串轉換為char陣列
new string(char):將char陣列轉換為字串
length:獲得字串的字元個數
toupper():將字串轉換為大寫形式
tolower():將字串轉換為小寫形式
equals():比較字串,可以忽略字串的大小寫
split():可以把我們在字串中不想要的字元都切割出去
9、物件導向的3大特徵:
9.2、繼承:繼承可以解決類與類之間的冗餘**。
我們把類當中,所共有的成員,單獨的封裝乙個類。 讓其他類來繼承這個類。
例如寫了 person 和 student 2個類 ,student類繼承了person類,那麼我們管student類稱之為子類或者派生類。管person類叫做父類或者基類。
子類繼承了父類的屬性和方法,並沒有繼承父類的私有字段。
注:子類並沒有繼承父類的建構函式,但是,子類會預設的呼叫父類無引數的建構函式。
為什麼子類要去呼叫父類無引數的建構函式?
1)、我們可能會在父類無引數的建構函式當中對父類成員進行初始化
2)、因為子類需要使用父類的成員,需要建立父類的物件。
(如果我們在父類中新寫了乙個建構函式,這個時候會乾掉父類那個預設的無引數的建構函式)解決辦法:
1)、在父類中重新寫乙個無引數的建構函式
2)、顯示的呼叫父類有引數的建構函式。使用關鍵字base
base跟this不一樣:base代表父類的引用;this代表的是該類的物件。
注:子類可以使用父類的成員,但是父類永遠只能使用自己的成員。
9.3、繼承的兩大特性:
1)、單根性:乙個子類只能繼承自乙個父類。
2)、傳遞性:父類中的成員,可以一代一代的向下傳遞。
10、黎克特制轉換:
兩句話:
1、子類可以賦值給父類(如果有乙個地方需要乙個父類作為引數 我們可以傳遞乙個子類)
eg:class person
}class student : person
}class teacher : person
}student s = new student();
person p = new student();
2、如果父類中裝的是子類物件,那麼可以將這個父類強值轉換為對應的子類物件
eg:student s = (student)p;
s.studentsayhello();
10.1、is和as:is 和 as都表示型別轉換。
is:如果轉換成功,返回true,否則返回false
eg:person p = new student();
if (p is student)
(student)p).studentsayhello();
else
as:如果轉換成功,則返回對應的物件,否則返回null
eg:person p = new student();
student s = p as student;
s.studentsayhello();
console.readkey();
C 基礎總複習01
馬上就快畢業了,準備把這幾個月所學到的知識梳理一下,這兒所寫的都是一些c 中最基礎的東西 大牛不要笑話我,這也是我記錄的一些筆記等等 希望能幫到一些正在學習這方面的知識的人,如果有寫的不對的地方,望大神們指點。先從最基礎的說起 1 c 是強型別語言 區分大小寫 對變數的型別必須有乙個明確的定義。2 ...
C 總複習 型別轉換
1.常見型別轉換 int i double d 2.5 i 1.5 隱式型別轉換 i int 1.5 顯式型別轉換 i d 隱式型別轉換 i int d 顯式型別轉換 一般情況下,int 型轉換為int型是非常不可思議的 即非常危險的 編譯器不允許隱式型別轉換的發生,報出錯誤。如果一定要完成這種不能...
C語言總複習(一)
一 c語言程式的結構 1.乙個程式由乙個或多個源程式檔案組成。1 預處理指令。2 全域性宣告。3 函式定義。2.函式是c程式的主要組成部分。3.乙個函式包括兩個部分。1 函式首部。2 函式體。函式體又包括宣告和執行兩個部分 4.程式總是從main函式開始執行的。5.程式中要求計算機的操作是由函式中c...