今天我們來看到~物件導向的三大特性~
什麼是物件呢~ 物件是指類別的實例。
例如,有一個類別是Car,我們可以將它實例化。
Car car=new Car(); //(小寫的)car就是物件
物件是物件導向程式的基本單位,它將程式和資料裝進去,提高軟體的重用性、靈活性和擴充性。
因此,我們可以用物件來存取及修改物件中的相關資料。
知道物件導向的基本概念後,我們去探究它的三大特性吧,封裝、繼承、多型~
學習目標: C#三大特性的概念
學習難度: ☆☆☆
封裝顧名思義就像是將一堆汽車零件(欄位、屬性、方法)封裝到汽車中(類別)。
例如,有一個類別是Car,我們可以將Car的相關資料存放在類別中。
public class Car
{
public int weight=10;
private string brand=toyota; //brand用在Car類別的運算
public string Brand //Name用在外部類別的讀取
{
get{return brand;} //外部讀取時會return toyota (brand)
set{brand=value;}
}
}
因此,我們要使用時,就能用Car去使用裡面的資料拉(weight, brand)~
例如,有一個業務員的類別,他想知道汽車的品牌是什麼。
我們就可以透過Car去讀取品牌的名字~
public class Bussiness
{
Car car=new Car();
Console.WriteLine("汽車的品牌是"+car.Brand);
}
繼承是指一個類別(子類別)去繼承另一個類別(父類別)的概念。
有點像小孩會繼承父親的特性~
所以子類別就能使用父類別的資料拉~
我們來看到繼承是如何被實現的。
public class Father
{
public string name="William";
}
public class Child : Father
{
}
public calss Introduction
{
Father father=new Father();
Child child=new Child();
child.name="Wilson";
Console.WriteLine(father.name); //印出William
Console.WriteLine(child.name); //印出Wilson
}
重點來拉~ Child中的name就不用在重新宣告了~
這樣程式碼是不是就簡潔多了呢~
接著~我們來看看其他繼承相關的規則~
C#只有單一繼承沒有多重繼承~
意思就是Child只能繼承Father~ 不能在繼承其他類別~
另外~在設計的時候~ 繼承的子類別要盡量與父類別有依存關係~
例如~ 麵包是食物~ 汽車是交通工具~ 小孩是父親的
多型是指父類別為子類別提供統一的虛擬(virtual)方法,子類別可以覆蓋(override)父類別的方法。
換句話說,子類能使用父類別的虛擬方法,但他們能輸出不一樣的結果。
那我們來看一個例子吧~
public class Father //父類別
{
public string words;
public virtual string Talk() //父類別宣告虛擬方法
{
words = "I can talk, and I am a father";
return words;
}
}
public class Child1:Father //子類別,Child1
{
public override string Talk() //子類別複寫虛擬方法
{
words = "I can talk too, and I am a child 1";
Console.WriteLine(words + "\n");
return words;
}
}
public class Child2 : Father //子類別,Child2
{
public override string Talk() //子類別複寫虛擬方法
{
words = "I can talk too, and I am a child 2";
Console.WriteLine(words + "\n");
return words;
}
}
class MainProgram
{
static void Main()
{
Child1 child1 = new Child1();
Child2 child2 = new Child2();
Father[] fathers = { child1, child2 }; //宣告父類別的陣列,裝子類別
foreach (Father father in fathers)
{
father.Talk(); //讓父類別陣列的子類都講話
}
}
}
參考資料:
https://www.youtube.com/watch?v=nYCMW3kfTvs&feature=youtu.be&ab_channel=BroCode