21個常見的OOP面試問題和今天要知道的答案

已發表: 2022-09-20

面向對象編程面試問題可以幫助程序員和開發人員增強他們對編程世界中關鍵概念的了解。

OOP 是最必要和最需要的編程範式之一,專注於對象和類而不是過程和函數。

一些基於 OOP 的編程語言是 Objective-C、Java、Ada、Perl、Python、C++ 等。

大公司尋求精通面向對象方法和模式的開發人員。

因此,如果您打算參加這樣的面試過程,您必須對 OOP 概念有深入的了解。

讓我們看看一些常見的OOP面試問題和答案,以幫助您準備面試和測試。

面向對象編程 (OOP):概述

哎呀

OOP 是一種以對象為中心的編程範式。 在這裡,對像被視為真實世界的實例,就像一個包含類模板中指定的一些行為和特徵的類。

例如,讓我們考慮一輛汽車。 根據 OOPs 模型:

  • 對象:一輛汽車。 它可以是任何類型或型號,例如您擁有的汽車。
  • 類別:汽車的型號或類型,例如寶馬、雪佛蘭、起亞、奧迪等。
  • 特徵:汽車的顏色、汽車的底盤號、發動機類型、齒輪類型等。
  • 行為:如何換檔,如何啟動汽車,等等。

在這裡,特性也稱為屬性、屬性或數據,而行為在編程語言中稱為過程、方法或函數。

所以,讓我們從一些常見的 OOP 面試問題開始。

術語 OOP 是什麼意思?

答:面向對象編程(OOP)是一種基於對象和類而不是過程和函數的編程模型。 單個對像被安排到類中。 OOP 使用多態性、隱藏、繼承等概念和編程範式來描述現實世界的實體。

OOP 將代碼和數據綁定在一起。 對像是通過具有特定特徵和行為的類定義的真實世界實體,而類被定義為特定對象的模式。 它也稱為用戶定義的數據類型。

這包括設計和製造程序以及移動應用程序。 例如,您可以將 OOP 用於製造系統仿真軟件。

除了 OOP 之外,還有哪些其他編程範式?

編程範式

答:編程範式是根據每種語言的特性對編程語言進行分類的方法。 有兩種類型的編程範式:

  • 命令式編程範式:它側重於如何執行邏輯並定義控制流。 它包括過程編程範式、面向對象編程 (OOP) 和並行編程。
  • 聲明式編程範式:它專注於在程序中執行什麼並定義其邏輯,而不是控制流。 它包括邏輯編程範式、函數式編程範式和數據庫編程範式。

OOP 和 SOP 有什麼區別?

答:我們通過這張表來了解OOP和SOP的區別:

面向對象編程面向結構的編程
它是一種基於對象而不是過程和函數的編程模型。 它為程序提供了一個邏輯結構,其中程序被劃分為功能。
遵循自下而上的方法遵循自上而下的方法
提供數據隱藏或封裝它不提供數據隱藏
它可以解決複雜的問題。 它可以解決中等問題。
低冗餘作為代碼可以再次使用它不支持代碼可重用性。
更靈活不太靈活
它的主要關注點是數據。 它主要關心的是程序的邏輯結構。

OOP的主要特點是什麼?

功能ofoops

答:以下是 OOP 的主要特點:

  • 遺產
  • 封裝
  • 抽象
  • 多態性
  • 方法覆蓋
  • 方法重載
  • 對象
  • 課程
  • 構造函數和析構函數

繼承、多態和封裝是 OOP 的基本元素,它們將這些特性與非 OOP 語言區分開來。

什麼是封裝?

答:封裝是一種將類、變量、方法等放入膠囊中的方法,該膠囊需要完成工作並向用戶呈現相同的膠囊。 簡單來說,就是把所有必要的方法和數據放在一起,對用戶隱藏不必要的細節。

也可以用其他方式定義:

  • 數據綁定:封裝是將數據成員與方法綁定在一起作為一個類或作為一個整體的過程。
  • 數據隱藏:封裝是隱藏不必要信息的過程,例如對對象成員的訪問限制等。

什麼是多態性?

多態性

回答:讓我們通過將術語分成構成它的兩個詞來理解多態性:

“聚”的意思是“許多”

“變形”的意思是“形狀”

因此,多態性可以描述為具有不同形狀的對象。

在 OOP 中,它被稱為一些數據、對象、方法或代碼在多個上下文或環境下表現不同的過程。 OOPs 模型中有兩種類型的多態性:

  • 運行時多態性
  • 編譯時多態性

換句話說,它是單個接口的多個定義。 例如,有一個名為'vehicle'的類,它包含一個方法'speed'。 由於不同的車輛具有不同的速度,因此無法定義速度。 因此,這可以在各種車輛的各種定義的子類中定義。

什麼是靜態多態?

答:靜態多態也稱為編譯時多態。 它是對象可以根據值與相應的運算符或函數鏈接的特徵。 這可以通過運算符重載或方法重載來實現。

在這裡,方法使用相似的名稱,但每個名稱的參數不同。 對於類似的觸發器,該對象的行為不同。 因此,多個方法在同一個類中實現。

什麼是動態多態性?

動態多態性

答:動態多態也稱為運行時多態。 它指的是 OOP 中的多態類型,通過它在執行或運行時確定函數的實際合併。 它可以通過方法覆蓋來實現。

例如,創建了兩個類,bike 和 Yamaha,並且 Yamaha 類擴展了 bike 類,覆蓋了它的 run() 方法。 由於子類方法覆蓋了父類方法,因此它在運行時被調用。

什麼是類?

答:類可以定義為包含一些值的藍圖或模板,稱為成員數據。 它還包括一些規則,稱為功能或行為。 創建對象時,它會自動獲取類中定義的函數和數據。

但是,類是對象的藍圖或模板。 可以根據類的要求設計盡可能多的對象。 例如,首先創建汽車的模板。 之後,根據汽車的模板設計不同的汽車單元。

什麼是對象?

對象

答:對象可以定義為一個類的實例,該類包含模板中定義的行為和成員的實例。 對像是用戶與之交互的實際實體,但類只是該對象的藍圖。

因此,對象具有某些特徵或行為並佔用空間——例如,特定的汽車模型。

類和結構有什麼區別?

答:讓我們藉助一張表格來理解這一點:

班級結構
類是引用類型。 結構是值類型。
它被分配到堆內存。 它分配在堆棧內存上。
大引用類型的分配更便宜值類型的分配比引用類型便宜
它具有無限的功能。 它的功能有限。
類用於大型程序。 結構用於小程序。
它包含一個構造函數和一個析構函數。 它包含參數化或靜態構造函數。
它每次創建實例時都使用 new() 關鍵字。 它可以輕鬆創建帶有或不帶有任何關鍵字的實例。
一個類可以繼承自另一個類。 不允許繼承結構。
可以保護類的數據成員。 無法保護結構的數據成員。
函數成員可以是抽象的或虛擬的函數成員不能是抽象的或虛擬的
類的兩個不同變量可以包含相似對象的引用。 每個變量都包含自己的副本。

什麼是繼承?

遺產

答:繼承是 OOP 的特性之一,它使一個類能夠繼承另一個類的主要屬性。 例如,如果“vehicle”是一個類,那麼“car”、“bike”等是可以從“vehicle”類繼承關鍵屬性的其他類。

此功能有助於擺脫冗餘代碼; 因此,減少了代碼的大小。 簡單來說,繼承被定義為從父類到子類的屬性的接收者。 這裡,'vehicle' 是父類,'car' 或 'bike' 是上例中的子類。

這樣,您可以在另一個類中重用一個類的編程代碼,而無需再次編寫相同的代碼或在此過程中浪費時間。

有哪些不同類型的繼承?

答: OOPs 模型中使用了多種類型的繼承,例如:

  • 單一繼承:定義為單一類繼承單一基類的通用功能的繼承。
  • 多重繼承:當單個類繼承多個類時出現。
  • 多級繼承:這意味著一個類繼承自其他類,這些類是其他類的子類。
  • 層次繼承:指一個類有多個子類的繼承。
  • 混合繼承:它是多級繼承和多重繼承的結合。

繼承的限制是什麼?

繼承限制

答:繼承的一些限制如下:

  • 它增加了執行程序所需的工作量和時間。 這是因為它需要經常從一個班級跳到另一個班級,這需要時間。
  • 父類與子類耦合非常緊密,因此靈活性較差。
  • 它需要仔細合併,否則會導致結果不充分或不正確。
  • 程序中的一次修改可能會導致父類和子類中的代碼發生變化。

什麼是抽象?

答:抽像是 OOP 的元素之一。 抽象的關鍵作用是處理複雜性。 這是通過向用戶隱藏不需要的詳細信息來完成的。 這允許用戶在抽象之上實現複雜的邏輯,而無需考慮隱藏的複雜性。

例如,如果您是咖啡愛好者,您需要知道使用咖啡機製作一杯咖啡時要添加多少牛奶、咖啡豆和方糖。 思考那台機器的工作原理是沒有意義的。 咖啡機是一個隱藏的複雜性,你不需要知道,但製作咖啡的過程是必要的。

有兩種類型的抽象:

  • 數據抽象
  • 過程抽象

什麼是構造函數?

構造函數

答:構造函數是類或結構中的一種特殊方法,其名稱與類名相似。 它服務於初始化對象所需的目的。 它還有助於實例化成員數據以及將對象分配給類的方法。

在創建構造函數時,需要牢記以下幾點:

  • 它的命名與類名相同。
  • 它不能是抽象的、最終的或靜態的。
  • 它沒有任何返回類型變量。

C++中有哪些不同類型的構造函數?

答: C++中的構造函數主要有以下三種:

  • 默認構造函數:定義中沒有參數或參數的構造函數。 這種類型的構造函數用於用實值初始化數據成員或變量。
  • 參數化構造函數:它在聲明和定義中包含參數或參數。 多個參數可以通過參數化構造函數。 它用於重載以了解多個構造函數的差異。
  • 複製構造函數:它是一個成員函數,它使用另一個類似類的對象來初始化一個對象。 此外,它有助於將數據從單個對象複製到另一個對象。

什麼是析構函數?

析構函數

答:析構函數是在銷毀對象時自動調用的方法。 它執行某些操作:

  • 恢復對像初始化期間之前分配的堆空間
  • 關閉數據庫連接和文件
  • 釋放網絡資源和資源鎖
  • 執行各種家政任務

換句話說,析構函數會破壞由構造函數初始化的對象。 它是一個特殊的成員函數,與類名同名,但前面有一個 (~) 符號。 析構函數可以重載,因為它是單向函數。

什麼是垃圾收集 (GC)?

答:垃圾收集 (GC) 是一種內置於 Java 和 C# 等編程語言中的內存回收元素。 支持 GC 的編程語言至少包含一個垃圾收集器,可以自動釋放程序中不再需要的內存空間。

垃圾收集確認程序仍在其內存配額內。 它可以防止開發人員手動管理程序的內存,從而最大限度地減少與內存相關的錯誤。

什麼是異常處理?

異常處理

答:異常處理是一種在計算機程序運行時響應意外事件的方法。 程序員必須“處理”不需要的事件(異常)以防止系統或程序崩潰。 如果沒有這種方法,異常可能會破壞程序的正常運行並導致效率低下或風險。

什麼是 try/catch 塊?

答: Trycatch是表示程序執行過程中由於編碼或數據錯誤而導致的異常處理的關鍵字。

  • try塊是發生異常的代碼塊
  • catch塊處理和捕獲 try 塊異常

trycatch語句經常用於各種編程語言,包括 C++。 C#、Java、SQL 和 JavaScript。 每個try語句都與一個catch語句匹配以處理執行。 在trycatch語句中還需要記住以下幾點:

  • try 塊後面是 catch 塊。
  • 一個 try 塊後跟至少一個 catch 塊。
  • 一個try 塊之後是另一個try 塊,然後是catch 塊。

結論

OOP 是程序員必須了解的基本概念。 徹底學習它還將幫助您在使用 OOP 概念的語言中進行良好的編程。

如果您正在準備面試或測試,上述面試問題和答案將幫助您刷新對 OOP 概念(如類、對象、封裝、多態性、繼承、抽像等)的理解。 這樣,您就可以自信地面對面試並成功通過面試,從而建立您的職業生涯。

您還可以查看其中一些 SQL 面試問題。