介紹:
第一天的內容主要是不同情形下的方法過載。這一部分則主要講物件導向中繼承的概念。首先用乙個要點圖形來定義繼承。
繼承
乙個簡單的例子:
classa:
class
classa:classb
}
classb:
class
classb
public
void
display2()
}
class
program
}
/*
輸出結果:
classa display1
classb display1
*/
在如上的例子中,classb是父類,classa是子類,classa繼承自classb(或classb派生出classa)。
這個例子也會得到乙個警告:「classa.display1()」隱藏繼承的成員「classb.display1()」。如果是有意隱藏,請使用關鍵字 new。 意思是說classa中的成員和classb中的成員一樣,這樣基類的就被隱藏了。如果故意為之,可以用"public new void display1()"來代替。
知識點:我們可以在子類中定義和基類名稱相同的成員,並且子類中的方法總是優先執行然後才是基類(遇到同名的情況時)。當然也可以用base關鍵字,在子類中呼叫基類中的成員。另外,繼承不能向後相容(意思就是說基類的例項無法呼叫派生類的成員,這很好理解)。除了建構函式和析構函式,我們可以從基類繼承任何成員。
對於類的成員,有兩種型別:
public
class
classb
public
class
classa : classb
//編譯時其實是:
public
class
classb:
object
public
class
classa : classb
在c#中,如果乙個類沒有繼承任何類,那麼它也會預設繼承自object類,它是所有類的共同的基類。另外一些特殊的類如:system.valuetype、system.delegate等無法繼承。
再看乙個例子:
public
class
classw
public
class
classx
public
class
classy : classw, classx
這樣定義classsy時,會報錯。知識點:在c#,乙個類只能繼承自乙個類,不支援多繼承。(其實c#的多繼承可以通過介面來完成)
再看乙個例子:
public
class
classw:classy
public
class
classx:classw
public
class
classy : classx
這樣也會報錯:涉及「classy」和「classw」的迴圈基類依賴項....(3個錯誤)
知識點:c#中不允許迴圈相依(circular dependency)。也就是互相繼承
再看乙個例子:
public
class
classb
public
class
classa:classb
///
/// program: used to execute the method.
/// contains main method.
///
public
class
program
}
知識點:我們可以把乙個派生類物件賦值給基類,但反過來不行。既(基類物件=派生類物件,可以;派生類物件=基類物件,不行)
我們可以在派生類中宣告已經在基類中宣告的同名函式。
派生類物件呼叫方法時,基類總是優先執行。
保留的關鍵字「base」可以在派生類中用於呼叫基類方法。
繼承不能向後相容。
除了建構函式和析構函式,乙個類可以從其基類繼承一切。
在 c# 中的繼承,自定義類不能派生自特殊建在 c# 之類的命令、 system.enum、 system.delegate、 system.array 等。
父類只可以有乙個。c# 不支援多重繼承通過類。
在 c# 中的繼承中不允許迴圈依賴項。
我們可以將派生類物件賦值給基類,而不是相反。
我們不能將 int 隱式轉換為char,但char可以轉換為 int。
物件導向之繼承
此段摘自 繼承方式限定了基類成員在派生類中的訪問許可權,包括 public 公有的 private 私有的 和 protected 受保護的 此項是可選的,如果不寫,預設為 private 或 protected。不要將繼承方式和成員屬性搞混了,不同的繼承方式會賦予繼承來的成員不同的屬性 簡單說一下...
物件導向之繼承
繼承 是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類 基類,超類 繼承描述的是一種遺傳關係,子類可以使用父類的屬性 注意 1 乙個類可以同時繼承多個父類 2 python中類分為兩種 新式類 繼承了object的類叫新式類,python3中所有的類都繼承了object類,即python3中...
物件導向之繼承
練習題 練習題 1class base def init self,num self.num num deffunc1 self print self.num class foo base pass obj foo 123 obj.func1 2 class base def init self,n...