c# 接口和抽象类学习总结

下面实例定义了一个抽象类和一个接口,抽象类中定义一个手机的属性和方法,接口定义一个玩游戏的方法。

抽象类代码:

 //抽象类是一个父类+约束 父类是为了实现代码重用 约束是为了多态变化 单继承 is a 
    public abstract class BasePhone
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Branch { get; set; }

        public abstract void System();//约束下子类有这个方法 但又各不相同

        public void Call()
        {
            Console.WriteLine($"Use {this.GetType().Name} Call");
        }

        public void SendMsg()
        {
            Console.WriteLine($"Use {this.GetType().Name} SendMsg");
        }
    }

接口代码:

  //接口就是一个约束 一个类可以实现多个接口 告诉别人一定有什么功能 can do
    public interface IExted
    {
        void PlayGame();
    }

定义小米手机类,继承抽象类BasePhone,并实现接口: 

  public class Mi : BasePhone, IExted
    {
        public void PlayGame()
        {
            Console.WriteLine($"Use {this.GetType().Name} PlayGame");
        }

        public override void System()
        {
            Console.WriteLine($"{this.GetType().Name} System is Android ");
        }
    }

定义苹果手机类,继承抽象类BasePhone,并实现接口: 

 public class iPhone : BasePhone, IExted
    {
        public void PlayGame()
        {
            Console.WriteLine($"Use {this.GetType().Name} PlayGame");
        }

        public override void System()
        {
            Console.WriteLine($"{this.GetType().Name} System is IOS ");
        }
    }

实例化对象并调用方法:

  class Program
    {
        static void Main(string[] args)
        {
            iPhone iphone = new iPhone();
            iphone.System();
            iphone.Call();
            iphone.SendMsg();
            iphone.PlayGame();
            iphone.Id=1;

            Mi mi = new Mi();
            mi.System();
            mi.Call();

            Console.ReadLine();
        }
    }

执行结果:

苹果手机和小米手机都有手机共同的属性和方法,比如打电话(Call),发送短信(SendMsg),但是它们的操作系统不同,所以将操作系统方法(System)定义为抽象方法,在父类(BasePhone)中不做实现,子类去重写操作系统这个方法。

同时苹果手机和小米手机都可以玩游戏,所以将玩游戏(PlayGame)的方法定义在接口中,实现接口的类必须实现接口中的每一个方法。这样苹果手机和小米手机都拥有了玩游戏的方法。

之所以把玩游戏的方法定义在接口中,而不是在抽象类中。是这么考虑的,除了手机可以玩游戏外,平板和电视同样可以玩游戏,但是平板和电视不能打电话和发送短信。

总结:

抽象类可以理解为是一个父类+约束,父类是为了实现代码的重用,约束是为了多态变化。抽象类只能单继承。用英文表示抽象类这个概念的话可以表示为‘is a’,表示是个什么东西,比如上面的例子中的BasePhone,表示的就是手机。

接口就是纯粹的约束,告诉别人有什么功能。用英文表示接口这个概念的话可以表示为‘can do’,表示是能够做什么。

在实际开发中,首先考虑使用接口,如果有代码需要重用,则考虑使用抽象类。

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/112735451