偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺談接口、抽象類(lèi)、抽象方法和虛方法的區(qū)別

開(kāi)發(fā) 后端
本文主要介紹的了接口、抽象類(lèi)、抽象方法和虛方法的區(qū)別,結(jié)合實(shí)際例子,為大家清楚的介紹了。希望對(duì)大家有幫助,一起來(lái)看。

C#抽象類(lèi)接口孩子間在對(duì)于抽象類(lèi)定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開(kāi)發(fā)者在進(jìn)行抽象類(lèi)定義時(shí)對(duì)于抽象類(lèi)和接口的選擇顯得比較隨意。其實(shí),兩者之間還是有很大區(qū)別的。

首先說(shuō)一下接口與抽象類(lèi)的異同:

相同點(diǎn):

1.他們都不能實(shí)例化自己,也就是說(shuō)都是用來(lái)被繼承的。

2.抽象類(lèi)中的抽象方法和接口方法一樣,都不能有方法體

不同點(diǎn):

1.抽象類(lèi)里可以有字段,接口中不能有字段.

2.抽象類(lèi)中的普通方法可以有方法體,而接口方法沒(méi)有方法體。

3.接口中的方法不能有訪問(wèn)修飾符,抽象類(lèi)中的抽象方法被繼承,需要override重寫(xiě) .

4.接口更像是一種規(guī)范,一種約束。

5.一個(gè)子類(lèi)只能繼承一個(gè)抽象類(lèi),但卻可以繼承多個(gè)接口。

接下來(lái)是抽象方法和虛方法的異同:

其實(shí)可以把抽象方法看做是沒(méi)有方法體的虛方法。

相同點(diǎn):

1.抽象方法和虛方法都可以被重寫(xiě)。

不同點(diǎn)

1.abstract 和virtual的關(guān)鍵字不同

2.抽象方法一定沒(méi)有方法體,而虛方法可以有方法體。

下面寫(xiě)個(gè)例子說(shuō)明一下:

 

  1. /// <summary>  
  2. /// 一個(gè)手機(jī)的抽象類(lèi)  
  3. /// </summary>  
  4. public abstract class Mobilephone   
  5. {  
  6. private string _logo;  
  7. public string Logo  
  8. {  
  9. get { return _logo; }  
  10. set { _logo = value; }  
  11. }  
  12. public abstract void Call();  
  13. public virtual void Callagain()   
  14. {  
  15. Console.WriteLine("我再打一個(gè)電話");  
  16. }  
  17. }  
  18. /// <summary>  
  19. /// 定義一個(gè)實(shí)體類(lèi),繼承了一個(gè)抽象類(lèi)及多個(gè)接口  
  20. /// </summary>  
  21. public class Nokia :Mobilephone,IClock,Ilistenmusic  
  22. {  
  23. public override void Call()  
  24. {  
  25. Console.WriteLine("NOKIA打電話沒(méi)問(wèn)題");  
  26. }  
  27. public void clock()  
  28. {  
  29. Console.WriteLine("NOKIA的手機(jī)也有鬧鐘功能");  
  30. }  
  31. public void listenmusic()  
  32. {  
  33. Console.WriteLine("NOKIA的手機(jī)還能聽(tīng)歌");  
  34. }  
  35. public override void Callagain()   
  36. {  
  37. Console.WriteLine("算了,還是不打了");  
  38. }  
  39. }  
  40. /// <summary>  
  41. /// 下面定義了兩個(gè)接口,為了說(shuō)明可以繼承多個(gè)接口  
  42. /// </summary>  
  43. public interface Ilistenmusic   
  44. {  
  45. void listenmusic();  
  46. }  
  47. public interface IClock   
  48. {  
  49. void clock();  
  50. }  

 

在補(bǔ)充一個(gè)小例子,

這里有到很有意思的面試題,說(shuō)名了new關(guān)鍵字和override的區(qū)別:

 

  1. class Program   
  2. {   
  3. static void Main(string[] args)   
  4. {   
  5. B5 b5 = new B5();   
  6. b5.MethodB();   
  7. }   
  8. }   
  9. public class A5   
  10. {   
  11. public virtual void MethodA()   
  12. {   
  13. Console.WriteLine("A5.MethodA");   
  14. Console.Read();   
  15. }   
  16. public virtual void MethodB()   
  17. {   
  18. MethodA();   
  19. }   
  20. }   
  21. public class B5 :A5   
  22. {   
  23. public new void MethodA()   
  24. {   
  25. Console.WriteLine("B5.MethodA");   
  26. Console.ReadLine();   
  27. }   
  28. }   
  29. class Program  
  30. {  
  31. static void Main(string[] args)  
  32. {  
  33. B5 b5 = new B5();  
  34. b5.MethodB();  
  35. }  
  36. }  
  37. public class A5  
  38. {  
  39. public virtual void MethodA()  
  40. {  
  41. Console.WriteLine("A5.MethodA");  
  42. Console.Read();  
  43. }  
  44. public virtual void MethodB()  
  45. {  
  46. MethodA();  
  47. }  
  48. }  
  49. public class B5 :A5  
  50. {  
  51. public new void MethodA()   
  52. {  
  53. Console.WriteLine("B5.MethodA");  
  54. Console.ReadLine();  
  55. }  
  56. }  

 

***的答案是:"A5.MethodA"

【編輯推薦】

  1. 分享c#常用函數(shù)和方法集
  2. c#.net實(shí)體類(lèi)序列化方法
  3. C#中的閉包是怎么捕獲變量的
  4. 解析C#委托、時(shí)間和Lambda表達(dá)式
  5. 用C#實(shí)現(xiàn)HTTP協(xié)議下的多線程文件傳輸
責(zé)任編輯:于鐵 來(lái)源: 超級(jí)兔子
相關(guān)推薦

2009-08-10 10:04:25

C#抽象類(lèi)C#接口

2009-04-30 15:15:01

Java抽象類(lèi)接口

2011-07-12 15:58:48

java抽象類(lèi)接口

2009-06-16 11:30:00

Java抽象類(lèi)Java接口

2009-06-14 21:31:29

Java抽象類(lèi)Java接口

2011-12-22 10:48:21

Java

2011-07-10 14:07:59

JAVA

2011-07-06 10:33:31

C#

2011-05-19 18:01:56

JAVA

2022-04-06 09:10:03

抽象類(lèi)型普通類(lèi)型Swift

2012-02-29 09:32:01

Java

2010-03-04 09:40:04

Java接口抽象類(lèi)

2021-12-23 07:11:31

開(kāi)發(fā)

2020-10-19 13:03:16

Java 8接口抽象類(lèi)

2015-03-23 09:33:43

Java抽象類(lèi)Java接口Java

2009-07-30 18:36:00

C#接口C#抽象類(lèi)

2009-08-14 15:54:17

C#接口和抽象類(lèi)

2010-07-06 08:58:52

UML圖表達(dá)C++

2009-08-03 18:12:31

C#抽象類(lèi)

2023-09-07 13:24:00

C++編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)