標籤:
物件導向之封裝性:
1、繼承要符合is-a的關係。即"子類is a 父類"——子類是父類。如:卡車是汽車,卡車is a 汽車。
2、父類中如果用Protected修飾符,表示只允許其子類訪問,而不允許其他非子類訪問:
父類中如果用private修飾符,子類是不能訪問的。
3、除了構造方法不能被子類繼承外,其他都可以直接被繼承。可以用base關鍵字調用父類的建構函式:文法如下
:base(參數變數名)
使用base還可以調用父類的屬性和方法。
注意:子類建構函式中已經定義了這些參數,在base()中只需指定變數名即可,
這個變數名必須與父類中的建構函式中的一致
4、繼承的特徵:
A 繼承的傳遞性
B 繼承的單根性 表示一個子類只能繼承一個父類。
C 密封類 它修飾的類是不能被繼承的。用關鍵字sealed
---------------------------------------------------------------------------------------------------------------------------------------------------
物件導向之多態性:
多態是指兩個或多個屬於不同類的對象,對於同一個訊息(方法調用)作出不同響應的方式。實現多態的方式:
一、抽象類別和抽象方法
1、 抽象類別的文法:
存取修飾詞 abstract class 類名
2、 父類中的方法:
存取修飾詞 abstract 傳回型別 方法();
注意:含有抽象方法的類必然是抽象類別。抽象類別中的方法並不一定都是抽象方法。
抽象類別是不能被執行個體化的。只能通過它的子類來實現該類的方法,除非它的子類也是一個抽象類別。
抽象類別不能是密封或者靜態,抽象類別被子類繼承並實現它的抽象方法。
3、重寫抽象方法:
存取修飾詞 override 傳回型別 方法()
4、使用場合:
A 父類提供了一個功能或者規定,約束子類的行為。
樣本:
abstract public class Person
{
abstract public void
SayHi();
}
//子類
public class
Student:Person
{
public override void SayHi()
{
//代碼省略
}
}
public class
Teacher:Person
{
public override void SayHi()
{
//代碼省略
}
}
裡氏替換原則
"is"操作符用於檢查對象是否與給定的類型相同。如: if(obj is string){}
"as"用於兩個對象之間的類型轉換。如:string as obj;
注意:as運算子當轉換失敗時,運算子將產生null,而不是引發異常。
"is"檢查一個對象是否相容於指定的類型,並返回一個Boolean值:true或者fasle。注意,is操作符永遠不會拋出異常,請看以下樣本:
ClassA
{
....
}
Object o=new Object();
Boolean b1=(o is Object); //b1為true.
Boolean b2=(o is ClassA) ; b2為false.
如果對象引用是null,is操作符總是返回false,因為沒有可檢查的其類型的對象。
二、虛方法:
存取修飾詞 virtual 傳回型別 方法()
{
//方法體
}
1、每個對象Object都有一個Equals()方法,用於確定兩個執行個體對象是否相等,它是一個虛方法,可以重寫這個方法。
public virtual bool Equals(Object obj)
預設情況下,Equals()方法只支援引用相等,也就是相比較的兩個對象是否引用同一個對象。
重寫Equals()虛方法如:
public override bool Equals(object obj)
{
//將要比較的對象轉換為當前類型
Student target = obj as Student;
//如果為空白、類型不同
if (target == null)
return false;
if (target.name == this.name &&
target.gender == this.gender &&
target.age == this.age &&
target.hobby == this.hobby &&
target.popularity == this.popularity)
{
return true;
}
return false;
}
2、虛方法和抽象方法的區別:
A、修飾的關鍵字不同
B、父類中方法體的區別
C、重寫的區別(抽象方法必須override)
D、抽象方法只能在抽象類別中,而虛方法除了密封類外都可以寫
3、方法重寫的條件:
A、方法簽名必須一樣
B、存取修飾詞允許被放大
C、傳回型別必須一樣
總結:物件導向的三大特徵:
封裝:保證對象自身資料的完整性、安全性
繼承:建立類之間的關係,實現代碼複用、方便系統的擴充
多態:相同的方法調用可實現不同的實現方式
三、方法重載
1、與重寫方法的區別
A、應用場合不同:如果父類中有abstract/virtual,才能被重寫,重寫方法要求類與類之間是繼承關係。
而重載沒有過多的要求。
四、方法隱藏:父類和子類的方法都存在。
五、靜態(satice)類/密封(sealed)類/抽象(abstract)類它們各自的特點
註:本文轉載於http://www.cnblogs.com/028fly/archive/2009/06/06/1497079.html
物件導向的封裝性和多態性