• 抽象和接口的区别和使用


    一,区别:

    1,接口可以多重继承

    2,接口是特殊的抽象

    3,抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。

    4,抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

    5,使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性

    二,应用场景:

    1》,我们有Chinese和English,都有自己独立的行为,这时我们就需要用到接口给他定义抽象的行为,而Chinese和English在这独立的行为中,我们又有相同的行为,这时我们可以定义people来给Chinese和English抽象公共的行为

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Interface
    {
        //抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。
        //抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
        class Program
        {
            public interface IEnglishEvent    //为中国人定义抽象行为
            {
                void Speak();
            }
            public interface IChineseEvent  //为英国人人定义抽象行为
            {
                void Eat();
            }
            public abstract class People   //对整个人类整体进行抽象
            {
                public abstract void CommonSay();
            }
            public class English : People, IEnglishEvent
            {
                public English()
                {
                    CommonSay();
                }
                public override void CommonSay()
                {
                    Console.Write("我英国人");
                }
                public void Speak()
                {
                    Console.WriteLine("说英文");
                }
            }
    
            public class Chinese : People, IChineseEvent
            {
                public Chinese()
                {
                    CommonSay();
                }
                public override void CommonSay()
                {
                    Console.Write("我是中国人");
                }
                public void Eat()
                {
                    Console.WriteLine("吃饭");
                }
    
            }
            static void Main(string[] args)
            {
                //如上代码,当我们将中国人和英国人分开为不同的对象时,各自定义不同的抽象行为时,我们需要用到接口
                //但是也是在这个场景中,我们中国人和英国人又有相同的行为呢?难道是给每一个接口行为添加相同的接口么?如CommonSay(),虽然这是一种方法,但是我们有N种相同怎么办?这样代码不就是增加了代码的重复?
                //所以这时我们需要用到抽象类。我们将人这一实物抽象出来,给人定定义一个抽象方法,中国人和英国人都继承实现,这样人不就有共同的行为了么
                IEnglishEvent en = new English();
                en.Speak();
                IChineseEvent ch = new Chinese();
                ch.Eat();
            }
        }
    }

     三,如上代码,

    1》当我们将中国人和英国人分开为不同的对象时,各自定义不同的抽象行为时,我们需要用到接口

    2》但是也是在这个场景中,我们中国人和英国人又有相同的行为呢?难道是给每一个接口行为添加相同的接口么?如CommonSay(),虽然这是一种方法,但是我们有N种相同怎么办?这样代码不就是增加了代码的重复?

    3》所以这时我们需要用到抽象类。我们将人这一实物抽象出来,给人定定义一个抽象方法,中国人和英国人都继承实现,这样人不就有共同的行为了么

    四,那位什么说使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性?

    1,我们的抽象类只能继承一个,而接口可以多继承,所以当我们抽象类是对一个事物的抽象,这个事物包含了行为等,而接口是属于这个事物的行为的抽象

    2,当对人这个事物的抽象时,我们就可以定义人这个事物的公共抽象行为,同时实现了代码的复用,可能我们都是说的行为,但是我们说的结果不一样,那就是多态的定义了

  • 相关阅读:
    ios 初吻
    Oracle 的sql*plus编辑器真够简陋
    人月神话:软件界面交互和易用性改进总结
    IIS管理
    【C#】自定义新建一个DataTable(3列),循环3维矩形数组往其填充数据
    window.open完美替代window.showModalDialog
    Sql Server之ORDER BY不规则排序.如:中文月份排序
    JS设计模式之单体模式(Singleton)
    关于第三方库引用的问题
    [JSTL] 使用本地化资源文件的方法
  • 原文地址:https://www.cnblogs.com/May-day/p/6426224.html
Copyright © 2020-2023  润新知