答:
abstract classabstract 声明抽象类抽象方法,一个类中有抽象方法,那么这个类就是抽象类了。所谓的抽象方法,就是不含主体(不提供实现方法),必须由继承者重写。因此,抽象类不可实例化,只能通过继承被子类重写。
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等修饰,无字段、常量,无构造函数
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApplication1{ public interface IBus { void getTypes(); } public interface IPlane { void getfunc(); } public class Car : IBus,IPlane { 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 可以实现多继承



