抽象类与接口的区别

目录 

在进行深入了解时,先做一道题吧,检测一下自己的基本功如何

class A
        {
            public A()
            {
                PrintFields();
            }
            public virtual void PrintFields() { }
        }
        class B : A
        {
            int x = 1;
            int y;
            public B()
            {
                y = -1;
            }
            public override void PrintFields()
            {
                Console.WriteLine("x={0},y={1}", x, y);
            }
        }

static void Main(string[] args)
        {
            B b = new B();
            b.PrintFields();

            Console.ReadLine();
        }

这样输出结果是什么呢?点击ViewCode查看答案

View Code
x=1,y=0
x=1,y=-1

为什么呢?
B b = new B()时,先执行A的构造函数,输出结果时,还没有执行B的构造函数,此时y=0
b.PrintFields(); 这个时候已经执行过B的构造函数,此时y=-1

抽象类与接口的对比已经有很多人写了,我就不详细介绍了,只对我目前的了解程序做一个总结

  抽象类是一类事物的抽象,比如,宝马、奔驰、奥迪都是车(抽象类)。

      接口定义一种行为:比如上面的三类车都会跑(接口),跑是每个车的行为,但是跑的具体方法有所不同。

这个比喻这说明抽象类与接口的表现形式不同,如果想深入了解请参考以下文章

http://kb.cnblogs.com/page/42159/

http://www.cnblogs.com/lovemyth/archive/2008/09/08/828909.html

这两篇文章足以能说明抽象类与接口的区别了。

原文地址:https://www.cnblogs.com/Fengger/p/2585401.html