dotNET面試題彙總系列連載(2):面向對象

馬上要到2020年了,這裏整理一個.NET 工程師面試題系列,希望年底或者明年金三銀四跳槽的程序猿們帶來一些幫助,建議收藏,如果文中答案有不準確的地方,請在評論中指出。

前文傳送門

問題目錄

  • 1.通常採用的訪問修飾符有哪五種
  • 2.多態的理解
  • 3.什麼是構造函數
  • 4.重寫和重載的區別
  • 5.class和struct的異同
  • 6.構造函數是否能被重寫?
  • 7.簡述一下面向對象的三大特性
  • 8.抽象類和接口有什麼區別?
  • 9.類的執行順序
  • 10.接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承實現類(concrete class)?
  • 11.繼承最大的好處?
  • 12.請說說引用和對象?
  • 13.什麼是匿名類,有什麼好處
  • 14.有哪些引用類型,有哪些值類型,有什麼區別
  • 15.C#中有沒有靜態構造函數,如果有是做什麼用的?
  • 16.怎樣理解靜態變量?靜態成員和非靜態成員的區別?
  • 17.在項目中爲什麼使用接口?接口的好處是什麼?什麼是面向接口開發?
  • 18.屬性能在接口中聲明嗎?
  • 19.什麼時候用重載?什麼時候用重寫?
  • 20.靜態方法可以訪問非靜態變量嗎?如果不可以爲什麼?

1.通常採用的訪問修飾符有哪五種

public:公開,訪問無限制
internal:本項目內可以訪問
internal protected:本項目的父子類可以訪問
protected:子類可以訪問
private:受保護的,只能在奔類中使用,對外完全封閉

2.多態的理解

解釋:同一操作作用於不同的對象,實現不同的結果。
作用:增強代碼的靈活性,重用性,可讀性
實現:通過派生類,覆寫基類的虛方法、重寫基類的override方法。

3.什麼是構造函數

概念:構造函數的方法名與類型相同、沒有返回類型

作用:完成對類的對象初始化

創建一個類的新對象時,系統會自動調用該構造函數初始化新對象,
如果沒有寫定義,那麼系統會自動提供一個不帶任何參數的public 構造函數

4.重寫和重載的區別

重寫方法:關鍵字用override修飾,派生類重寫基類的方法,方法命名、返回類型,參數必須相同

重載方法:方法名必須相同,參數列表必須不相同,返回類型可以不相同。
作用:重寫主要是實現面向對象的多態性、重載主要是實現實例化不同的對象

5.class和struct的異同?

  • 相同點

都可以實現接口

  • 不同點

1.class是引用類型,struct是值類型

2.class允許繼承、被繼承,struct不允許,只能繼承接口

3.class可以初始化變量,struct不可以

4.class可以有無參的構造函數,struct不可以,必須是有參的構造函數,而且在有參的構造函數必須初始化所有成員

  • 使用場景

1.Class比較適合大的和複雜的數據,表現抽象和多級別的對象層次時。Struct適用於作爲經常使用的一些數據組合成的新類型,表示諸如點、矩形等主要用來存儲數據的輕量級對象時,偏簡單值。

2.Struct有性能優勢,Class有面向對象的擴展優勢。

6.構造函數是否能被重寫?

構造器Constructor不能被繼承,因此不能重寫,但可以被重載

7.簡述一下面向對象的三大特性
  • 封裝、繼承、多態。
  • 封裝:是通過把對象的屬性的實現細節隱藏起來,僅對外提供公共的訪問方法。
  • 繼承:是通過子類繼承基類、繼承抽象類、繼承接口實現的。
  • 多態:是通過重寫基類的override 方法、重寫虛方法實現的。
  • 好處是:方便維護、易擴展。
  • 缺點是:比面向過程性能低。

8.抽象類和接口有什麼區別?

相同點:都不能直接實例化

  • 1.抽象類用abstract修飾、接口用interface修飾
  • 2.抽象類中的方法可以實現,也可以不實現,有抽象方法的類一定要用abstract修飾,接口中的方法不允許實現
  • 3.抽象類只能單繼承,接口支持多繼承
  • 4.抽象類有構造方法,接口不能有構造方法
  • 5.接口只負責功能的定義,通過接口來規範類的,(有哪些功能),而抽象類即負責功能的定義有可以實現功能(實現了哪些功能)
9.類的執行順序

執行順序:父類,子類,靜態塊,靜態字段,非靜態塊,非靜態字段,構造器,方法

10.接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承實現類(concrete class)?

接口可以繼承接口,抽象類可以實現接口,抽象類可以繼承實現類,但前提是實現類必須有明確的構造函數。

11.繼承最大的好處?

對父類成員進行重用,增加代碼的可讀性、靈活性。

12.請說說引用和對象?

對象和引用時分不開的,對象生成一個地址,放在堆裏面,引用則指向這個地址,放在棧裏面

13.什麼是匿名類,有什麼好處

不用定義、沒有名字的類,使用一次便可丟棄。好處是簡單、隨意、臨時的。

14.有哪些引用類型,有哪些值類型,有什麼區別
  • 引用類型:類、接口、委託、字符串、數組
  • 值類型:整形、浮點型、結構體、枚舉、bool
  • 值類型和引用類型的區別在於,值類型的變量直接存放實際的數據,而引用類型的變量存放的則是數據的地址,即對象的引用。
  • 默認值,值類型是0,引用類型null。
15.C#中有沒有靜態構造函數,如果有是做什麼用的?
  • 特點
    靜態構造函數既沒有訪問修飾符,也沒有參數。
    在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。
    無法直接調用靜態構造函數。在程序中,用戶無法控制何時執行靜態構造函數。
  • 用途
    當類使用日誌文件時,將使用這種構造函數向日志文件中寫入項。
16.怎樣理解靜態變量?靜態成員和非靜態成員的區別?

靜態變量屬於類,而不屬於對象;並對所有對象所享;靜態成員在加類的時候就被加載。

17.在項目中爲什麼使用接口?接口的好處是什麼?什麼是面向接口開發?
  • 接口是一種約束,描述類的公共方法/公共屬性,不能有任何的實現
  • 好處是:結構清晰,類之間通信簡單易懂,擴展性好,提高複用性。
  • 面向接口開發就是指面向抽象協議編程,實現者在實現時
18.屬性能在接口中聲明嗎?

可以,不能有訪問修飾符,不能初始化賦值。

19.什麼時候用重載?什麼時候用重寫?

當一個類需要用不同的實現來做同一件事情,此時應該用重寫,而重載是用不同的輸入做同一件事情

20.靜態方法可以訪問非靜態變量嗎?如果不可以爲什麼?

靜態方法和非靜態變量不是同一生命週期,靜態方法屬於類,非靜態變量屬於具體的對象,靜態方法和具體的對象沒有任何關聯

作者信息:
【文章信息】:
作者-張林
原文鏈接-https://blog.csdn.net/kebi007/article/details/103501723
【原創公衆號】:dotNet全棧開發。
【簡介】:CSDN 博客專家, xamarin跨平臺開發者,博客園app開發者(ps:雖然下載量還行10萬+,並沒有什麼大用)這是一個堅持原創的技術公衆號,每天堅持推送各種 dotNet 基礎/進階文章,編程技巧,爬蟲實戰,面試經驗,xamarin開發系列不定期分享各類資源。
【福利】:送你新人大禮包一份,關注微信公衆號,後臺回覆:“CSDN” 即可獲取!
版權聲明:本文爲CSDN博主「dotNet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
————————————————
版權聲明:本文爲CSDN博主「dotnet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/kebi007/article/details/103655685

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章