一,区别:

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