zoukankan      html  css  js  c++  java
  • 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 可以实现多继承

  • 相关阅读:
    后缀自动机学习笔记
    [bzoj4516][Sdoi2016]生成魔咒——后缀自动机
    [bzoj1692][Usaco2007 Dec]队列变换——贪心+后缀数组
    BZOJ4811 [Ynoi2017]由乃的OJ
    codeforces796E Exam Cheating
    BZOJ1004 [HNOI2008]Cards
    BZOJ1798 [Ahoi2009]Seq 维护序列seq
    BZOJ4785 [Zjoi2017]树状数组
    UOJ207 共价大爷游长沙
    POJ3768 Katu Puzzle
  • 原文地址:https://www.cnblogs.com/TJessica/p/6806975.html
Copyright © 2011-2022 走看看