C# interface与abstract class区别

转载自 http://blog.csdn.net/fengzhongzhishenfu/article/details/23286641

C# interface与abstract class区别

一、abstract class

abstract 声明抽象类抽象方法,一个类中有抽象方法,那么这个类就是抽象类了。所谓的抽象方法,就是不含主体(不提供实现方法),必须由继承者重写。因此,抽象类不可实例化,只能通过继承被子类重写。

实例代码:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace ConsoleApplication1  
  8. {  
  9.     public abstract class Bus  
  10.     {  
  11.         public abstract void getName();  
  12.         public virtual void getTypes()  
  13.         {  
  14.             Console.WriteLine("bus");  
  15.         }  
  16.         public void getID()//一般方法,若在派生类中重写,须使用new关键字  
  17.         {  
  18.             Console.WriteLine("沪A 00000");  
  19.         }  
  20.     }  
  21.     public class car : Bus  
  22.     {  
  23.         public override void getName()  
  24.         {  
  25.             Console.WriteLine("奥迪");  
  26.         }  
  27.         public override void getTypes()  
  28.         {  
  29.             Console.WriteLine("car");  
  30.         }  
  31.     }  
  32.     class Program  
  33.     {  
  34.          
  35.         static void Main(string[] args)  
  36.         {  
  37.             car mycar = new car();  
  38.             mycar.getName();  
  39.             mycar.getTypes();  
  40.             mycar.getID();  
  41.         }      
  42.     }  
  43. }  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public abstract class Bus
    {
        public abstract void getName();
        public virtual void getTypes()
        {
            Console.WriteLine("bus");
        }
        public void getID()//一般方法,若在派生类中重写,须使用new关键字
        {
            Console.WriteLine("沪A 00000");
        }
    }
    public class car : Bus
    {
        public override void getName()
        {
            Console.WriteLine("奥迪");
        }
        public override void getTypes()
        {
            Console.WriteLine("car");
        }
    }
    class Program
    {
       
        static void Main(string[] args)
        {
            car mycar = new car();
            mycar.getName();
            mycar.getTypes();
            mycar.getID();
        }    
    }
}

输出:

 

奥迪 car 沪A 00000

 

二 interface

声明接口,只提供一些方法规约,不提供任何实现;不能用public、abstract等修饰,无字段、常量,无构造函数。

示例代码:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace ConsoleApplication1  
  8. {  
  9.     public interface Bus  
  10.     {  
  11.         void getTypes();  
  12.     }  
  13.     public interface plane  
  14.     {  
  15.         void getfunc();  
  16.     }  
  17.     public class car : Bus  
  18.     {  
  19.           
  20.         public void getTypes()  
  21.         {  
  22.             Console.WriteLine("car");  
  23.         }  
  24.         public void getfunc()  
  25.         {  
  26.             Console.WriteLine("fly");  
  27.         }  
  28.     }  
  29.     class Program  
  30.     {  
  31.          
  32.         static void Main(string[] args)  
  33.         {  
  34.             car mycar = new car();  
  35.             mycar.getTypes();  
  36.             mycar.getfunc();  
  37.         }      
  38.     }  
  39. }  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public interface Bus
    {
        void getTypes();
    }
    public interface plane
    {
        void getfunc();
    }
    public class car : Bus
    {
        
        public void getTypes()
        {
            Console.WriteLine("car");
        }
        public void getfunc()
        {
            Console.WriteLine("fly");
        }
    }
    class Program
    {
       
        static void Main(string[] args)
        {
            car mycar = new car();
            mycar.getTypes();
            mycar.getfunc();
        }    
    }
}

输出结果:

 

car
fly

三、区别

1.interface中不能有字段,而abstract class可以有;

2.interface中不能有public等修饰符,而abstract class 可以有。

3.interface 可以实现多继承

posted @ 2017-05-04 14:33  弄丢的小可爱🌸  阅读(605)  评论(0编辑  收藏  举报