二、多型
總結靜態與非靜態的各個要點,還有就是對繼承中的知識進行補足,黎克特制轉換原則的了解,is as運算子的基本常規使用,實現多型的三種方式,虛方法,抽象類,介面
1.靜態的定義:無論什麼成員被static修飾,那麼這個成員變為靜態成員,列如類被修飾則為靜態類,方法被修飾則為靜態方法,欄位則變為靜態字段等等…下面將詳細對靜態與非靜態進行分析:
1.如果當前成員是靜態成員,那麼需要加上static關鍵字進行修飾。
2.兩者之間的呼叫的區別:
—>靜態成員在呼叫的時候需要使用類名來呼叫。---->屬於類
—>但是非靜態成員在呼叫的時候要求使用物件名來呼叫。---->物件
3.靜態類:靜態類中只允許出現靜態成員,語法要求
4.非靜態類:
—>在非靜態類中允許出現靜態成員,也允許出現非靜態成員。
—>在非靜態函式中即允許訪問非靜態成員,也允許訪問靜態成員(如果你要訪問其他類的靜態成員, 前提是你要訪問的成員必須被public出來)
5.什麼時候用非靜態?
----->靜態成員只有在整個程式結束的時候才能夠被釋放資源。所以說,我們的程式中靜態成員應該是越少越好。
6.靜態建構函式不能加訪問修飾符,靜態建構函式會比例項建構函式先執行
**如下(示例):
namespace 靜態static
} class student
----
->靜態建構函式不能加訪問修飾符,靜態建構函式會比例項建構函式先執行
static
student()
private string name;
public string name
set
} private int age;
public int age
set
} private string schoolname;
public string schoolname
set
} public void
studentsayhello()
,年齡,學校名稱"
,this.name,this.age,this.schoolname);}
}----->靜態類中只能包含靜態成員,不能包含例項成員
class persion
set
} private static string name;
public static string name
set
} public static
void
persionsayhello()
",name);}
}}
【@】黎克特制替換原則:
1.子類可以賦值給父類
2.如果父類中裝的是子類物件,那麼可以將這個父類轉換為"對應"的子類物件
【@】我們可以使用is.as運算子幫助我們進行轉換:
1.is、as都表示型別轉換,不同的是,他們的返回值不一樣。
2.is:是否可以執行型別轉換 ,返回值是bool型別。
3.as:表示型別轉換,如果成功,則返回對應的物件,如果失敗則返回null。
注:對知識點進行補充—>//null 「」 string s=null string s="「這兩個乙個」 "是在記憶體中開闢了控制項,null乙個是沒有開闢記憶體空間
**如下(示例):
namespace 黎克特制轉換原則
else
if(p is teacher)
}else
#endregion
#region as轉換
teacher teach= p as teacher;
if(teach != null)
else
#endregion
console.
readkey()
;}static persion getsingle
(int number)
return per;}}
class persion
class student:persion
} class teacher : persion
}}
雖然多型是乙個很抽象的問題,但是我對多型的理解如下:
1.多型意在讓乙個物件能夠表現出多種的型別、狀態。
2.多型:就是用父類型別變數,後面跟著子類的例項,然後可以呼叫子類的函式(這個就叫表現出多種型別,狀態)。
3.實現多型的有三種方法:虛方法,抽象類,介面。
虛方法的實現:
–>在父類的函式前面加個virtual關鍵字
—>在子類每個函式前面加上override關鍵字
**如下(示例):
namespace 多型
;for
(int i =
0; i < pers.length; i++
)//else if (pers[i] is japanese)
////else if (pers[i] is korea)
////else if (pers[i] is american)
//#endregion
} console.
readkey()
;}} class persion
set
} public persion
(string name)
----
->標記這個函式是虛函式,可以被子類重寫。
public virtual void
sayhello()
} class chinese:persion
public override void
sayhello()
,我是中國人"
,this.name);}
} class japanese : persion
----
->override表示重寫父類的虛函式
public override void
sayhello()
,我是日本人"
,this.name);}
} class korea:persion
public override void
sayhello()
,我是南韓人"
,this.name);}
} class american : persion
public override void
sayhello()
,我是美國人"
,this.name);}
}}
1.抽象類需要abstract關鍵字來修飾
2.裡面可以包含抽象成員,也可以包含普通成員,**中有詳細的概括
**如下(示例):
namespace 抽象類
} abstract class animal
set
} private int age;
public int age
set
} private char gender;
public char gender
set
} public void
sayhello()
#endregion
} class cat : animal
} class dog : animal
}}
1.介面概念:介面側重於表示 1、能力 2、規範
2.介面的名字一般都以"i"開頭,側重於表示一種能力
3.介面可以多繼承
4.介面中的成員不寫訪問修飾符,預設是public,而類中的成員不寫訪問修飾符,預設是private
5.介面的名字一般都以"i"開頭,側重於表示一種能力
6.介面實現多型和抽象類實現多型是一樣的,都是宣告父類去指向子類物件…
**如下(示例):
namespace 介面}--
->為了滿足student的多繼承,我們使用介面
--->介面的名字一般都以"i"開頭,側重於表示一種能力
--->介面可以多繼承
inte***ce ikoulan
inte***ce ifly
class persion
--->不能再父類中封裝扣籃的函式,因為並不是所有的子類都會扣籃
//public void koulan()//}
class student : persion, ikoulan, ifly
public void
koulan()
} class teacher : persion, ikoulan
} class nolegs : persion
class nbaplay : ikoulan
}}
1.介面中的成員不能加「訪問修飾符」,介面中的成員訪問修飾符為public,不能修改。
2.類中的成員預設的訪問修飾符是private ,而介面中預設的訪問修飾符是public
3.介面中的成員不能有任何實現(「光說不做」,只是定義了一組未實現的成員)。
4.介面中只能有方法、屬性、索引器、事件,不能有「字段」和建構函式。
5.介面與介面之間可以繼承
6.介面並不能去繼承乙個類,而類可以繼承介面 (介面只能繼承於介面,而類既可以繼承介面,也可以繼承類)
7.實現介面的子類必須實現該介面的全部成員。
8.乙個類可以同時繼承乙個類並實現多個介面,如果乙個子類同時繼承了父類a,並實現了介面ia,那麼語法上a必須寫在ia的前面。
注:當乙個抽象類實現介面的時候,需要子類去實現介面。
多寫寫多看看得到的總會多一點。
終於安靜一點了
總是在對自己有很多不滿的同時,無限的放縱自己 昨天發燒了,幸福的光明正大的逃了課,今天身體好多了,還是放縱自己到10點才醒。中午吃完飯寢室裡只有自己乙個人,開啟電腦,我竟然看起了qt文件,有自己亂用了用qt designer,查了查資料,想弄弄qmake但是不會配置環境,就又查了查 然後有點困,就亂...
高效學習的一點感悟
高效利用學習時間 在學習的每一秒都要全心投入,要麼認真做要麼就不做,比如上課要麼專心聽講,要麼覺得沒意思直接別去,不要一邊聽課還想著一邊寫個作業啥的一心二用 但某些情況除外,比如開會就要邊聽邊記筆記邊動腦 費曼技巧 不得不說真的是很好用的學習方法,步驟如下 已經理解的可以跳過 第一步 選擇要學習的概...
java一點東西(3)
運算子的優先順序 優先順序最高 單目運算子 賦值符號 物件導向設計步驟 1.發現類 2.發現類的屬性 3.發現類的方法 優化設計 編寫程式入口 迭代器 如何遍歷list集合?方法1.用for迴圈和get 方法結合實現遍歷 for each迴圈可以遍歷輸出,但不可刪減 方法2.用迭代器iterator...