標籤:
多態:表示不同的對象可以執行相同的動作,但是通過它們自己的實現代碼來執行。這裡需要將父類將該成員聲明為虛擬,而且用到了方法重寫(override).
抽象類別:用abstract聲明抽象類別,注意抽象類別不能執行個體化,抽象方法必須被子類重寫。
介面:是把隱式公用方法和屬性群組合起來,以封裝特定的功能的一個集合,一旦類實現了介面,就可以支援介面所指定的所有屬性好成員。一個類可以支援多個介面,多個類也可以支援相同的介面。
集合:是優於數組,.NET Framework提供了用於資料存放區和檢索的專用類。集合隨著我們向裡邊添加元素而自動增加,自動調節大小。提供了對堆棧,隊列和雜湊表的支援。
泛型:具有預留位置(即參數類型)的類,結構,介面和方法。和集合緊密聯絡,泛型集合可以獲得型別安全的直接優點。也就是說類型固定了。
定義類和介面的代碼:
<span style="font-size:18px;"> abstract class Animal//利用關鍵字abstract定義了一個抽象類別 { protected string name = ""; public Animal(string name) { this.name = name; } public Animal() { this.name = "無名"; } protected int shoutNum = 6;//叫聲的次數 public int ShoutNum { get { return shoutNum; } set { shoutNum = value; } } public string shout()//叫聲發出的代碼 { string result = ""; for (int i = 0; i < shoutNum; i++) result += getshoutsound() + ", ";//調用了getshoutsound的虛方法 return "我的名字叫"+ name + ""+result ; } protected virtual string getshoutsound()//修飾符virtual表示此方法為虛方法,可以被子類重寫 { return ""; } } //定義不同的子類,來實現父類,其實就是多態的很好體現 class Cat:Animal //子類貓 { public Cat():base() {} public Cat (string name):base (name) {} protected override string getshoutsound() { return"喵"; } } class Dog : Animal//子類狗 { public Dog() : base() { } public Dog(string name) : base(name) { } protected override string getshoutsound() { return "喵"; } } class Cattle : Animal//子類牛 { public Cattle() : base() { } public Cattle(string name) : base(name) { } protected override string getshoutsound() { return "哞"; } } class sheep:Animal//子類羊 { public sheep ():base() {} public sheep(string name) : base(name) { } protected override string getshoutsound() { return "咩"; } } interface Ichange//定義了一個介面 { string changething(string thing); } class Machinecat : Cat, Ichange//定義了個機器貓,繼承父類貓,並使用了介面Ichange { public Machinecat() : base() { } public Machinecat(string name) : base(name) { } public string changething(string thing) { return base.shout ()+ "我有萬能口袋,我可以變出:" + thing; } }</span>
下邊是用戶端的代碼:
<span style="font-size:18px;"> //private Animal[] arrayAnimal;//聲明一個動物數組 //集合的使用 IList<Animal> arrayAnimal;//聲明一個泛型集合變數,用介面Ilist,注意Ilist<Animal>表示此集合變數只能接受Animal類型 //貓叫的按鈕事件 private void button1_Click(object sender, EventArgs e) { Cat cat = new Cat("咪咪"); //類的執行個體化 cat.ShoutNum = 7; MessageBox.Show(cat.shout()); } //狗叫的按鈕事件 private void button2_Click(object sender, EventArgs e) { Dog dog = new Dog("旺財");//這裡只是簡單的調用方法,即可實現目的,體現了封裝的特性 dog.ShoutNum = 6; MessageBox.Show(dog.shout()); } //動物報名的按鈕 private void button3_Click(object sender, EventArgs e)//動物報名按鈕, { //arrayAnimal = new Animal[5];//執行個體化最多可以可報名5個的動物數組對象 arrayAnimal = new List<Animal> ();//執行個體化List對象 arrayAnimal.Add(new Cat ("小花"));//報名分別是貓和狗 arrayAnimal.Add( new Dog("阿毛")); arrayAnimal.Add ( new Dog("小黑")); arrayAnimal.Add(new Cat("嬌嬌")); arrayAnimal.Add( new Cat("咪咪")); MessageBox.Show(arrayAnimal.Count.ToString());//列印出我們添加的個數 arrayAnimal.RemoveAt(1);//這裡還可以刪除我們多添加的。 } //讓報名的所有動物進行叫聲比賽 private void button4_Click(object sender, EventArgs e) { foreach (Animal item in arrayAnimal)//遍曆整個數組,讓他們一次實施shout的方法 { MessageBox.Show(item.shout()); } } //叮噹貓變出東西的事件代碼 private void button5_Click(object sender, EventArgs e) { Machinecat mcat = new Machinecat("叮噹");//執行個體化機器貓 Machinecat mcat1 = new Machinecat("叮噹2"); Ichange[] array = new Ichange[2];//聲明一個介面數組,將兩個執行個體賦值給數組 array[0] = mcat; array [1]=mcat1; MessageBox.Show(array[0].changething("各種各樣的東西!"));//利用多態性,實現不同的changething MessageBox .Show (array[1].changething ("好多好多東西哈!")); }</span>
關於C#物件導向2