1. 程式人生 > >abstract 與interface區別

abstract 與interface區別

一、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. }


輸出:

奧迪
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. }


輸出結果:

car
fly

三、區別

1.interface中不能有欄位,而abstract class可以有;

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

3.interface 可以實現多繼承