學完C#視頻後,對面向對象這個概念有了更深的體會。
那麼什麼是面向對象呢,什麼樣的程序是面向對象的設計呢,要明白這些首先要了解面向對象的三大特性:封裝、繼承、多肽。
總結圖:
一:封裝
是把客觀事物封裝成抽象的類
如:Cat類
class Cat //定義Cat類
{
private string name; //聲明Cat類的私有字符串變量, 是內部字段
public Cat() //構造方法
{
this.name = " ";
}
public Cat(string name) //將構造方法重載
{
this.name = name;
}
public string Shout() //Shout 貓叫方法
{
return "喵";
}
}
貓的屬性name和Shout()的方法,都在Cat這個類中。
表面上看,Cat 類用 { }將它的屬性和方法括在了一起,其實是對象進行封裝。就好比我們常用的筆記本電腦,將很多零件封裝在了內部,我們用電腦的時候,只需要按一下開關就可以拉,不用再管他們內部的操作。
二:繼承
是類間的關系,被繼承的類是基類,繼承的類為派生類。
在C#中繼承的關鍵符號是 “:”,如Cat 類繼承Animal 類
class Cat : Animal //Cat 類繼承Animal 類
{
public Cat()
: base() //子構造方法需要調用父類同樣的構造方法用base關鍵字
{ }
public Cat(string name)
: base(name)
{ }
使用繼承將子類公共部分放到父類,不僅可以減少代碼重復,而且修改方便。
三:多肽
多肽表示不同的對象有相同的動作,但是通過他們自己的實現代碼執行
多肽實現:1,將所要實現的方法定義成父類中的虛方法;2,子類使用override實現
具體如下:
class Animal
{
public virtual string Shout() //定義了一個Shout的虛方法,可以子類被重寫
{
return "";
}
}
class Cat : Animal //Cat 類繼承Animal
{
public override string Shout()//對父類中的虛方法重寫,得到自己的Shout方法
{
return "喵";
}
}
class Dog : Animal
{
public override string Shout()
{
return "旺";
}
}
總結:
1,屬性是封裝對象的數據,方法是對象的行為,在代碼中,屬性後面不帶括號,方法帶括號。
2,判斷兩個類間是不是繼承關系,就判斷滿不滿足“什麼什麼是什麼”,如“狗是動物”。
3,抽象類一定是用來繼承的,且實例化沒有意義。
4,重載是兩個或者多個構造函數,重寫是實現父類中的虛方法(virtual /override)。
5,在基類中定義的虛方法有方法體,實現的時候是重寫,有選擇的,而抽象方法沒有方法體,必須別子類重寫。