許多觀念必須透過實作你才會知道他的用處
介面(Interface)
某天在查看介面觀念時剛好看到sam寫的blog,覺得他的舉例實在是淺顯易懂
因此自己也稍微練習了一下試試看介面與抽象到底是什麼東西
抽象實在是個很難解釋的東西,到底什麼是抽象呢??
對我來說抽象並不是一個毫無定義的東西,我倒覺得他比較像是泛指某個東西
在生活中的抽象
例如 :
當我們在看電影時,一開始都會有出現說 "請各位觀眾將手機調成震動或關機"
對我們來說這是再簡單不過的一個語句,就是自己手上的那支手機
但是,這就是所謂的抽象。
各位觀眾的手機 泛指 iphone htc sony 等許多種牌子
程式的抽象 (直接截自sam的舉例)
這是 sam 形容的 interfase 而且他也舉了一個例子
我們都知道手機百百種,iphone htc sony 每個手機的功能皆不同,例如iphone 有siri 。
但他們共同皆有的功能便是 打電話 調整音量 掛電話 轉震動
因此我們便可以在建立一個介面去寫 打電話 調整音量 掛電話 轉震動 這些方法但真正實做的事情卻不在這邊寫
程式碼中建立interface並且定義打電話 調整音量兩個方法
這邊稍微注意一下~~ interface 命名 要以 I 開頭
namespace Learn
{
public interface Iphone
{
void call(string phoneNum);
void adjusVolumn(int vol);
}
}
在 ios 類別中去繼承phone這個介面,要注意的是當我們繼承介面後,必須實做裡面的所有方法。
若沒有實作的話,編譯器是build 不過的喔~
這邊繼承了Iphone並且實做了adustVolumn 跟 call 因為是 ios 所以自行多寫一個call siri的方法
namespace Learn
{
class ios: Iphone
{
public void adjusVolumn(int vol)
{
Console.WriteLine("調整音量為" + vol);
}
public void call(string phoneNum)
{
Console.WriteLine("ios打電話給" + phoneNum);
}
public void callSiri()
{
Console.WriteLine("Call Siri");
}
static void Main(string[] args)
{
iphone i = new iphone();
i.call("00000");
i.adjusVolumn(50);
i.callSiri();
}
}
}
輸出的結果為下圖
另外,若我們在建立物件的時候是
Iphone s = new ios();
會是怎樣呢??
我們會發現竟然沒有callSiri這個方法耶!!
那是因為我們並不是new ios 這個類別,因此他並不會出現只有在iphone 類別中的方法
多個介面實作
講完單介面實作,當然就要在來個多個介面來實作啦 !!!
在.net C# 中繼承只能繼承一個父類別,但是實作卻可以多個一起實作
參考資料:
[心得整理] c# 物件導向程式 - 3.抽象與interface:https://dotblogs.com.tw/initials/2016/06/18/102618