C#淺析接口與抽象基類--學習總結
1. 個性大於共性。
2. 差異較大的個性間具有某些相同的行爲。
3. 相同行爲的實現方式有較大區別。
開門見山:
當在差異較大的對象間尋求功能上的共性時,使用接口。
當在共性較多的對象間尋求功能上的差異時,使用抽象基類。
接口案例:
//==============================================================
// 作者:zhoupei
// 時間:2019/2/15 16:34:27
// 文件名:InterFace_Swim
// 版本:V1.0.1
// 說明:接口
//==============================================================
//定義接口,游泳
public interface ISwim
{
//定義方法;游泳的方式
public void SwimmingStyle();
}
//定義人類;繼承游泳接口
public class Person : ISwim
{
//人類游泳
public void SwimmingStyle();
}
//定義蛙類;繼承游泳接口
public class Frog : ISwim
{
//蛙類游泳
public void SwimmingStyle();
}
public class Fish : ISwim
{
//魚類游泳
public void SwimmingStyle();
}
抽象基類案例:
//==============================================================
// 作者:zhoupei
// 時間:2019/2/15 16:34:27
// 文件名:Abs_Fish
// 版本:V1.0.1
// 說明:抽象基類
//==============================================================
/// <summary>
/// 定義魚類游泳
/// </summary>
public abstract class Abs_Fish
{
public abstract void FishSwim();
}
//鯽魚游泳
public class JI_Fish : Abs_Fish
{
public override void FishSwim()
{
Console.WriteLine("鯽魚游泳");
}
}
//錦鯉游泳
public class LI_Fish : Abs_Fish
{
public override void FishSwim()
{
Console.WriteLine("錦鯉魚游泳");
}
}
//金魚游泳
public class Gold_Fish : Abs_Fish
{
public override void FishSwim()
{
Console.WriteLine("金魚游泳");
}
}
觀察在使用接口或是使用抽象基類的幾條理由中,第三條理由其實是一樣的,它所描述的是面向對象中多態的概念,即通過覆蓋父類的方法來實現,在運行時根據傳遞 的對象引用,來調用相應的方法。第二條理由開始產生分歧,接口更加強調了繼承對象間具有相同的行爲,而抽象類同時還強調了繼承對象間具有相同的屬性。
引自:淡淡的憂傷 的話