為什麼使用抽象類,什麼時候使用抽象類

2022-01-19 02:13:26 字數 2767 閱讀 3498

假設有2個類,乙個類是主力球員,乙個類是替補球員。

public

class normalplayer

public

string firstname

public

string lastname

public

decimal weeksalary

public

string getfullname()

public

decimal getdaysalary()

}
public

class subplayer

public

string firstname

public

string lastname

public

decimal monthsalary

public

string getfullname()

public

decimal getweeksalary()

}

我們發現,normalplayer和subplayer有共同的屬性和方法,當然也有不同的屬性和方法。把2個類的共同部分抽象出乙個基類。

public

class baseplayer

public

string firstname

public

string lastname

public

string getfullname()

}

然後讓先前的2個類派生於這個基類。

public

class normalplayer: baseplayer

public

decimal getdaysalary()

}
public

class subplayer : baseplayer

public

decimal getweeksalary()

}

接著,我們發現normalplayer和subplayer計算日薪和周薪的方法也可以抽象出來,作為虛方法放到基類中。

public

class baseplayer

public

string firstname

public

string lastname

public

string getfullname()

public

virtual

decimal getsalary()

}

在normalplayer和subplayer這2個派生類中,需要重寫基類的虛方法。

public

class normalplayer: baseplayer

//獲取日薪
public

override

decimal getsalary()

}
public

class subplayer : baseplayer

//獲取周薪
public

override

decimal getsalary()

}

但在實際情況中,baseplayer只是乙個抽象出來的類,我們並不希望例項化這個類。這時候,就可以把baseplayer設計為abstract抽象類。同時,在抽象類中,提供乙個計算薪水的抽象方法。一旦在基類中宣告了沒有方法體的抽象方法,所有派生於這個抽象類的類必須實現或重寫基類中的抽象方法。

public

abstract

class baseplayer

public

string firstname

public

string lastname

public

string getfullname()

public

abstract

decimal getsalary();

}

由此可見,當2個或多個類中有重複部分的時候,我們可以抽象出來乙個基類,如果希望這個基類不能被例項化,就可以把這個基類設計成抽象類。

什麼時候使用抽象類, 什麼時候使用介面

介面是一種協定,抽象類則相當於類模板。使用抽象類,而不要使用介面來分離協定與實現。如果需要提供多型層次結構的值型別,使用介面。如果乙個型別必須實現多個協定,或者協定適用於多種型別,使用介面。雖然抽象類和介面都支援將協定與實現分離開來,但介面不能指定以後版本中的新成員,而抽象類可以根據需要新增成員以支...

什麼時候使用介面,什麼時候使用抽象類

使用抽象類是為了 的復用,而使用介面的動機是為了實現多型性。抽象類適合用來定義某個領域的固有屬性,也就是本質,介面適合用來定義某個領域的擴充套件功能。一 什麼時候使用抽象類?當2個或多個類中有重複部分的時候,我們可以抽象出來乙個基類,如果希望這個基類不能被例項化,就可以把這個基類設計成抽象類。當需要...

什麼時候用介面,什麼時候用抽象類

很多人都認為抽象類和介面都 差不多 於是就隨便選一種來開發專案。其實這是一種非常不明智的做法,若選擇上稍微有些錯誤,到了專案開發後期,這些錯誤將會越來越明顯,越來越大,最後直接導致專案的失敗。在介面和抽象類的選擇上,必須遵守這樣乙個原則 行為模型應該總是通過介面而不是抽象類定義。為了說明其原因,下面...